aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore19
-rw-r--r--ThreatDragonModels/test model/test model.json12
-rw-r--r--bootstrap/README.md140
-rwxr-xr-xbootstrap/apply-baseupdate.sh15
-rwxr-xr-xbootstrap/create-hostsfile.sh17
-rwxr-xr-xbootstrap/create-shellconf.pl30
-rwxr-xr-xbootstrap/fetch-debinstall.sh17
-rwxr-xr-xbootstrap/fetch-ubuntulive.sh21
-rwxr-xr-xbootstrap/init-sshkeys.sh14
-rwxr-xr-xbootstrap/install-dependencies.sh61
-rwxr-xr-xbootstrap/make-base-requires.sh82
-rwxr-xr-xbootstrap/make-bind-include.pl48
-rwxr-xr-xbootstrap/make-dhcp6-init.sh378
-rwxr-xr-xbootstrap/make-dhcpd-include.pl30
-rwxr-xr-xbootstrap/make-dhcpd.pl293
-rwxr-xr-xbootstrap/make-dhcpd6.pl171
-rwxr-xr-xbootstrap/make-first-zones.pl125
-rwxr-xr-xbootstrap/make-missing-conf.pl174
-rwxr-xr-xbootstrap/make-named.pl196
-rwxr-xr-xbootstrap/make-pxeboot.sh35
-rwxr-xr-xbootstrap/make-reverse4-files.pl160
-rwxr-xr-xbootstrap/update-baseservice.sh31
-rwxr-xr-xbootstrap/update-tools.sh27
-rwxr-xr-xclients/dhcptail.pl59
-rwxr-xr-xclients/fetch-cubemap-munin.sh17
-rwxr-xr-xclients/ipv6-dns.pl138
-rw-r--r--clients/ipv6-stats.pl98
-rwxr-xr-xclients/ping.pl100
-rwxr-xr-xclients/smanagrun.pl156
-rwxr-xr-xclients/snmpfetchng.pl141
-rwxr-xr-xfap/README.md37
-rwxr-xr-xfap/database/README.md63
-rwxr-xr-xfap/dhcpd/DHCP_protocol_breakdown.txt18
-rwxr-xr-xfap/dhcpd/module_craft_option.py79
-rwxr-xr-xfap/dhcpd/module_lease.py174
-rwxr-xr-xfap/dhcpd/server_dhcp.py360
-rwxr-xr-xfap/dhcpd/terminal.log146
-rwxr-xr-xfap/httpd/# DEPRECATED/server_http.py146
-rwxr-xr-xfap/httpd/# DEPRECATED/terminal.log14
-rwxr-xr-xfap/httpd/README.md26
-rwxr-xr-xfap/httpd/files/.gitignore3
-rw-r--r--fap/httpd/httpd_root/# create_queries - DEPRECATED/create_queries.php55
-rw-r--r--fap/httpd/httpd_root/# create_queries - DEPRECATED/ipcalc_functions.php134
-rw-r--r--fap/httpd/httpd_root/# create_queries - DEPRECATED/patchlist.txt142
-rw-r--r--fap/httpd/httpd_root/# create_queries - DEPRECATED/switches.txt142
-rw-r--r--fap/httpd/httpd_root/.gitignore0
-rwxr-xr-xfap/httpd/httpd_root/.htaccess3
-rwxr-xr-xfap/httpd/httpd_root/ex2200.template288
-rwxr-xr-xfap/httpd/httpd_root/ex2200_secure.template312
-rw-r--r--fap/httpd/httpd_root/pg_connect.php6
-rwxr-xr-xfap/httpd/httpd_root/x.php67
-rw-r--r--fap/logs/httpd.log667
-rwxr-xr-xfap/proof_of_concepts/distro_during_testing.config355
-rwxr-xr-xfap/proof_of_concepts/tg15-tech82-poc1.tar.gzbin4691 -> 0 bytes
-rw-r--r--fap/tools_temp/get_info.php48
-rw-r--r--include/FixedSNMP.pm125
-rwxr-xr-xinclude/config.pm.dist136
-rwxr-xr-xinclude/nms.pm186
-rw-r--r--include/nms/snmp.pm91
-rw-r--r--include/nms/util.pm141
-rwxr-xr-xinclude/nms/web.pm112
-rw-r--r--netlist.txt174
-rw-r--r--nms/.bashrc16
-rw-r--r--nms/.gitignore1
-rw-r--r--nms/Dockerfile.in119
-rw-r--r--nms/README.md32
-rw-r--r--nms/ansible/inventories/localtest5
-rw-r--r--nms/ansible/inventories/prod5
-rw-r--r--nms/ansible/roles/nmsfront/handlers/main.yml5
-rw-r--r--nms/ansible/roles/nmsfront/tasks/main.yml76
-rw-r--r--nms/ansible/roles/nmsfront/vars/main.yml6
-rw-r--r--nms/ansible/roles/tgmanage/tasks/main.yml14
-rwxr-xr-xnms/ansible/roles/tgmanage/templates/config.pm.j2109
-rw-r--r--nms/ansible/roles/tgmanage/vars/main.yml13
-rw-r--r--nms/ansible/site.yml70
-rwxr-xr-xnms/config.pm81
-rwxr-xr-xnms/makedockerfiles.sh26
-rw-r--r--nms/nms-dump.sql695
-rw-r--r--nms/pg_hba.conf118
-rw-r--r--nms/postgresql.conf616
-rw-r--r--tech-support/labels/old/README.txt29
-rw-r--r--tech-support/labels/old/cable_labels.pl16
-rw-r--r--tech-support/labels/old/switch_labels.py120
-rwxr-xr-xtools/add_switches.txt.pl17
-rwxr-xr-xtools/cubemap-stats.pl130
-rwxr-xr-xtools/deplist.sh22
-rwxr-xr-xtools/generate-dnsrr.pl149
-rwxr-xr-xtools/generate-rowdns.pl111
-rwxr-xr-xtools/get_mibs.sh15
-rwxr-xr-xtools/lldp/dotnet.sh9
-rwxr-xr-xtools/lldp/draw-neighbors.pl35
-rwxr-xr-xtools/lldp/lldpdiscover.pl280
-rwxr-xr-xtools/make-linknet-hosts.pl58
-rw-r--r--tools/sql-strip.pl35
-rw-r--r--web/etc/apache2/nms-public.tg16.gathering.org.conf30
-rw-r--r--web/etc/apache2/nms.tg16.gathering.org.conf56
-rw-r--r--web/etc/nginx/default.conf331
-rw-r--r--web/etc/varnish/nms.vcl55
-rwxr-xr-xweb/nms-public.gathering.org/api/public/dhcp20
-rwxr-xr-xweb/nms-public.gathering.org/api/public/dhcp-summary16
-rwxr-xr-xweb/nms-public.gathering.org/api/public/ping37
-rwxr-xr-xweb/nms-public.gathering.org/api/public/switch-state91
-rwxr-xr-xweb/nms-public.gathering.org/api/public/switches36
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.css476
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.css.map1
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.min.css5
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.css6584
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.css.map1
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.min.css5
-rw-r--r--web/nms-public.gathering.org/css/jquery.datetimepicker.css568
-rw-r--r--web/nms-public.gathering.org/css/navbar-static-top.css4
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eotbin20127 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg288
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttfbin45404 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woffbin23424 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2bin18028 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart-clean-big.pngbin84362 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart-full.pngbin167427 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart.pngbin141073 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg16-salkart-clean-big.pngbin293835 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg16-salkart-full.pngbin575014 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/index.html278
-rw-r--r--web/nms-public.gathering.org/js/bootstrap.js2317
-rw-r--r--web/nms-public.gathering.org/js/bootstrap.min.js7
-rw-r--r--web/nms-public.gathering.org/js/jquery.datetimepicker.full.js3073
-rw-r--r--web/nms-public.gathering.org/js/jquery.min.js4
-rw-r--r--web/nms-public.gathering.org/js/nms-color-util.js93
-rw-r--r--web/nms-public.gathering.org/js/nms-data.js259
-rw-r--r--web/nms-public.gathering.org/js/nms-info-box.js713
-rw-r--r--web/nms-public.gathering.org/js/nms-map-handlers.js491
-rw-r--r--web/nms-public.gathering.org/js/nms-map.js580
-rw-r--r--web/nms-public.gathering.org/js/nms.js692
-rw-r--r--web/nms-public.gathering.org/js/npm.js13
-rw-r--r--web/nms.gathering.org/api/API.rst131
-rwxr-xr-xweb/nms.gathering.org/api/public/dhcp20
-rwxr-xr-xweb/nms.gathering.org/api/public/dhcp-summary16
-rwxr-xr-xweb/nms.gathering.org/api/public/location44
-rwxr-xr-xweb/nms.gathering.org/api/public/ping37
-rwxr-xr-xweb/nms.gathering.org/api/public/switch-state97
-rwxr-xr-xweb/nms.gathering.org/api/public/switches36
-rwxr-xr-xweb/nms.gathering.org/api/read/comments15
-rwxr-xr-xweb/nms.gathering.org/api/read/snmp30
-rwxr-xr-xweb/nms.gathering.org/api/read/switches-management30
-rwxr-xr-xweb/nms.gathering.org/api/write/comment-add24
-rwxr-xr-xweb/nms.gathering.org/api/write/comment-change25
-rwxr-xr-xweb/nms.gathering.org/api/write/switch-add92
-rwxr-xr-xweb/nms.gathering.org/api/write/switch-update123
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.css476
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.css.map1
-rw-r--r--web/nms.gathering.org/css/bootstrap-theme.min.css5
-rw-r--r--web/nms.gathering.org/css/bootstrap.css6584
-rw-r--r--web/nms.gathering.org/css/bootstrap.css.map1
-rw-r--r--web/nms.gathering.org/css/bootstrap.min.css5
-rw-r--r--web/nms.gathering.org/css/jquery.datetimepicker.css568
-rw-r--r--web/nms.gathering.org/css/navbar-static-top.css4
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.eotbin20127 -> 0 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg288
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttfbin45404 -> 0 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.woffbin23424 -> 0 bytes
-rw-r--r--web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2bin18028 -> 0 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart-clean-big.pngbin84362 -> 0 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart-full.pngbin167427 -> 0 bytes
-rw-r--r--web/nms.gathering.org/img/tg15-salkart.pngbin141073 -> 0 bytes
-rw-r--r--web/nms.gathering.org/img/tg16-salkart-clean-big.pngbin293835 -> 0 bytes
-rw-r--r--web/nms.gathering.org/img/tg16-salkart-full.pngbin575014 -> 0 bytes
-rw-r--r--web/nms.gathering.org/index.html337
-rw-r--r--web/nms.gathering.org/js/bootstrap.js2317
-rw-r--r--web/nms.gathering.org/js/bootstrap.min.js7
-rw-r--r--web/nms.gathering.org/js/jquery.datetimepicker.full.js3073
-rw-r--r--web/nms.gathering.org/js/jquery.min.js4
-rw-r--r--web/nms.gathering.org/js/nms-color-util.js93
-rw-r--r--web/nms.gathering.org/js/nms-data.js259
-rw-r--r--web/nms.gathering.org/js/nms-info-box.js1177
-rw-r--r--web/nms.gathering.org/js/nms-map-handlers.js490
-rw-r--r--web/nms.gathering.org/js/nms-map.js590
-rw-r--r--web/nms.gathering.org/js/nms.js792
-rw-r--r--web/nms.gathering.org/js/npm.js13
-rw-r--r--web/stats.gathering.org/hover.gifbin62 -> 0 bytes
-rw-r--r--web/stats.gathering.org/index.css54
-rw-r--r--web/stats.gathering.org/index.html41
-rw-r--r--web/stream.gathering.org/.htaccess4
-rwxr-xr-xweb/stream.gathering.org/embed.pl105
-rw-r--r--web/stream.gathering.org/embed.tmpl53
-rwxr-xr-xweb/stream.gathering.org/generate_vlc.pl90
-rw-r--r--web/stream.gathering.org/img/cam-map.pngbin113375 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_1.pngbin3142 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_2.pngbin3336 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_3.pngbin3385 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_camera.pngbin3786 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_event.pngbin3463 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_hd.pngbin3412 -> 0 bytes
-rw-r--r--web/stream.gathering.org/img/icon_sd.pngbin3731 -> 0 bytes
-rwxr-xr-xweb/stream.gathering.org/index.pl106
-rw-r--r--web/stream.gathering.org/index.tmpl231
-rw-r--r--web/stream.gathering.org/resources/css/button-styles.css31
-rw-r--r--web/stream.gathering.org/resources/css/core.css252
-rw-r--r--web/stream.gathering.org/resources/css/normalize.css427
-rw-r--r--web/stream.gathering.org/resources/css/skeleton.css418
-rw-r--r--web/stream.gathering.org/resources/css/video-js-resolutions.css33
-rw-r--r--web/stream.gathering.org/resources/css/video-js.css5
-rw-r--r--web/stream.gathering.org/resources/fonts/vjs.ttfbin4640 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/fonts/vjs.woffbin3492 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/images/loading.pngbin40671 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/images/logo.svg5585
-rw-r--r--web/stream.gathering.org/resources/images/pixel-white.pngbin2205 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/images/pixel_animation.gifbin5002 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/images/thegathering.pngbin37462 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/images/vlc.pngbin2668 -> 0 bytes
-rw-r--r--web/stream.gathering.org/resources/js/jwplayer.js1
-rw-r--r--web/stream.gathering.org/resources/js/video-js-resolutions.js432
-rw-r--r--web/stream.gathering.org/resources/js/video-quality-selector.js387
-rw-r--r--web/stream.gathering.org/resources/js/video.js200
-rw-r--r--web/stream.gathering.org/resources/js/videojs-contrib-hls.js11691
-rw-r--r--web/stream.gathering.org/resources/swf/GrindPlayer.swfbin1012946 -> 0 bytes
-rw-r--r--web/stream.gathering.org/streamlib/stream.pm36
-rw-r--r--web/stream.gathering.org/streamlib/stream/config.pm207
216 files changed, 0 insertions, 65405 deletions
diff --git a/.gitignore b/.gitignore
index ed14c4a..eb8312b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,4 @@
-web/.htpasswd
-web/.htpasswd.munin
-web/htpasswd*
-web/stream.gathering.org/hls
-web/stream.gathering.org/chiobe
-web/nms-public.gathering.org/nettkart-dhcp.png
-web/nms-public.gathering.org/nettkart-trafikk.png
-web/nms-public.gathering.org/weathermap
-web/nms-public.gathering.org/nettkart.json
-web/nms-public.gathering.org/ping.json
-web/nms-public.gathering.org/speedometer.json
-web/nms-public.gathering.org/switches.json
-web/nms.gathering.org/.htaccess
-working-area/
-include/config.pm
-include/tgmanage.cfg.sh
planning/planning
-fap/tools/generate_distro_config_ae_event-options/
-nms/build/
-mibs/
# OS-crap
.DS_Store
diff --git a/ThreatDragonModels/test model/test model.json b/ThreatDragonModels/test model/test model.json
deleted file mode 100644
index 169a0df..0000000
--- a/ThreatDragonModels/test model/test model.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "summary": {
- "title": "test model",
- "owner": "me",
- "description": "testing"
- },
- "detail": {
- "contributors": [],
- "diagrams": [],
- "reviewer": "me"
- }
-} \ No newline at end of file
diff --git a/bootstrap/README.md b/bootstrap/README.md
deleted file mode 100644
index 149da80..0000000
--- a/bootstrap/README.md
+++ /dev/null
@@ -1,140 +0,0 @@
-Outline:
-------------------------------------------------------------------
-
- 1. Install OS on three boxes
- 2. Bootstrap:
- * Install tgmanage on one, the bootstrap (tools, include, netlist.txt)
- * Install dependencies on bootstrap
- * Push SSH key key to the other boxes (init-sshkeys.sh)
- * Update configuration
- * Update netlist.txt
- * Bootstrap the primary and secondary (make-base-requires.sh)
- 3. Create new networks/scopes/zones Update during the party using
- update-baseservice.sh from bootstrap
- 4. Apply changes usling bootstrap/apply-baseupdate.sh (reloads bind, restarts dhcpd)
- 5. Changes to generated scopes, pools, zones are done on the primary, in the files
- 6. If tools need patching, patch on boot and push with update-tools.sh
- 7. Before wednesday evening, the infra.tgXX.gathering.org zone should be updated!
-
-**Only use make-base-requires.sh during bootstrap !!!!!!! :P**
-
-Detailed instructions and description:
-==================================================================
-
-1: Install Debian
-------------------------------------------------------------------
-
-The following three hosts/servers are normally used:
- * A 'bootstrap' box. This server will be used to configure
- the first TG-servers, and may end up hosting the switch-config and NMS.
- * The server to use as Primary DNS and DHCP server
- * The server to use as Secondary DNS and SMTP.
-
-2: Perform bootstrapping
-------------------------------------------------------------------
-
-Start by placing the 'tgmanage' directory as '/root/tgmanage' on the bootstrap
-box. Change into the 'tgmanage' directory. Next, run
-'bootstrap/install-dependencies.sh boot'
-
-Copy 'include/config.pm.dist' to 'include/config.pm'. Edit for this year's TG. Use
-'bootstrap/create-shellconf.pl' to extract configuration from the perl module to
-create/update the 'include/tgmanage.cfg.sh' configuration script.
-
-Run 'bootstrap/create-hostsfile.sh' to make sure the bootstrap-box can use
-hostnames to reach the pri/sec DNS even before DNS is set up.
-
-The tools make extensive use of key-based SSH logins, to make this work
-seamlessly, run 'bootstrap/init-sshkeys.sh' to create an RSA priv/pub keypair, and
-push the pubkey to the Primary and Secondary boxes.
-
-
-The Network-list is _not_ automagically updated. A copy of last year's
-netlist.txt should be included in the goodiebag. With that as a base, update
-for this year's address plan. Remember that client nets in the hall are
-supposed to be pulled from switches.txt ...
-The rest of the information needed should be pulled from techwiki.g.o The
-format of the file is: one net per line, lines starting with # are skipped,
-format of each net-line is:
-
- # <v4 net> <v6 net> <network-name>
- 151.216.129.0/26 2a02:ed02:129a::/64 noc
-
-
-Run 'bootstrap/make-base-requires.sh'. This script will log in on the Primary and
-Secondary boxes, install dependencies and the BIND/DHCP packages, create all
-needed directories, create the initial configuration files.
-
-A short listing of the tasks of scripts called by make-base-requires (NOTE: these
-scripts are run by bootstrap/make-base-requires.sh, you should not need to run these individually):
- * bootstrap/install-dependencies.sh
- * Installs needed base software to boot, primary and secondary
- * bootstrap/make-named.pl
- * Basic BIND setup (creates named.conf et.al)
- * bootstrap/make-first-zones.pl
- * Creates static zone-files (tgname, infra, ipv6zone)
- * bootstrap/make-reverse4-files.pl
- * Creates reverse-zones for IPv4
- * bootstrap/make-dhcpd.pl
- * Sets up the base setup for DHCP4
- * bootstrap/make-dhcpd6.pl
- * Sets up the base setup for DHCP6
-
-3++: Update during the party using update-baseservice.sh from bootstrap
-------------------------------------------------------------------
-
-After 'bootstrap/make-base-requires.sh' has been run, further updating should be
-managed by the following three files:
- * bootstrap/update-baseservice.sh
- * Used to add/update bind and DHCP configuration
- * bootstrap/apply-baseupdate.sh
- * Used to reload bind and restart DHCP
- * bootstrap/update-tools.sh
- * Used to push changes to the tgmanage toolchain
-
-This means, after the base setup is completed, updating and managing the
-configuration is done by updating netlist.txt and running bootstrap/update-baseservice.sh
-from the bootstrap box, or from the NMS box if the toolchain gets moved there during
-the party.
-
-To create a new DHCP scope, add DNS forward and reverse zone for a new network:
-
- * Add the network to netlist.txt
- * Run bootstrap/update-baseservice.sh to generate new .conf and .zone files
- * Run bootstrap/apply-baseupdate.sh to load new configuration
-
-To do changes to DHCP config after the scope .conf file has been created
-(read: later in the party), log in to the primary/dhcp server, and make
-the changes in the appropriate .conf file ..
-
-To do DNS changes to the main DNS zone or the infra-zone, make the changes
-in the appropriate zone file on the primary DNS server.
-
-To add DNS records to any other DNS zone (forward or reverse), you have
-to use 'nsupdate'. To simplify the process, use tools/generate-dnsrr.pl
-Usage on this tool is documented in the "header" of the script...
-
-
-The update prosess is handled by a bunch of "sub-tools", these should typically
-not need to be run individually:
- * bootstrap/make-bind-include.pl
- * Run via update-baseservice, adds new net's to DNS include
- * bootstrap/make-dhcpd-include.pl
- * Run via update-baseservice, adds new net's to DHCP include
- * bootstrap/make-missing-conf.pl
- * Run via update-baseservice, adds missing net-conf to BIND/DHCP
-
-
-7: Generation of linknet dns content
-------------------------------------------------------------------
-
-Format for linknet.txt is documented in make-linknet-hosts.pl
-
-Generate IPv4 infra hostnames and IP address assignments
-by using tools/generate-dnsrr.pl
-
-Output from this shuld go in infra.tgXX.gathering.org.zone on primary:
-> cat linknet.txt | tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain infra.tgXX.gathering.org
-
-Output from this should go as input to nsupdate, see doc in generate-dnsrr.pl:
-> cat linknet.txt | tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain infra.tgXX.gathering.org -ns -rev
diff --git a/bootstrap/apply-baseupdate.sh b/bootstrap/apply-baseupdate.sh
deleted file mode 100755
index d4c6fe2..0000000
--- a/bootstrap/apply-baseupdate.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-set -e
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-ssh -l root ${PRIMARY} "/etc/init.d/isc-dhcp-server restart"
-ssh -l root ${PRIMARY} "/etc/init.d/isc-dhcp6-server restart"
-ssh -l root ${PRIMARY} "/usr/sbin/rndc reload"
-ssh -l root ${SECONDARY} "/usr/sbin/rndc reload"
diff --git a/bootstrap/create-hostsfile.sh b/bootstrap/create-hostsfile.sh
deleted file mode 100755
index 2aaf9cb..0000000
--- a/bootstrap/create-hostsfile.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-set -e
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-echo >> /etc/hosts
-echo "# Bootstrap hosts entries for ${TGNAME} ">> /etc/hosts
-echo "${PRI_V6} ${PRIMARY}" >> /etc/hosts
-echo "${PRI_V4} ${PRIMARY}" >> /etc/hosts
-echo "${SEC_V6} ${SECONDARY}" >> /etc/hosts
-echo "${SEC_V4} ${SECONDARY}" >> /etc/hosts
diff --git a/bootstrap/create-shellconf.pl b/bootstrap/create-shellconf.pl
deleted file mode 100755
index 63e4361..0000000
--- a/bootstrap/create-shellconf.pl
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $bind_base = "/etc/bind/";
-my $dhcpd_base = "/etc/dhcp/";
-
-my $shellconf_file = "include/tgmanage.cfg.sh";
-
-open CFG, ">" . $shellconf_file or die ($! . " " . $shellconf_file );
-
-print CFG "# This file is autogenerated by bootstrap/create-shellconf.pl,\n";
-print CFG "# using data from nms::config.\n";
-print CFG "#\n";
-print CFG "# Do you need new common/configuration variables?\n";
-print CFG "# Add/update include/config.local.pm and bootstrap/create-shellconf.pl\n\n";
-print CFG "TGNAME=\"$nms::config::tgname\"\n\n";
-print CFG "PRIMARY=\"$nms::config::pri_hostname.$nms::config::tgname.gathering.org\"\n";
-print CFG "PRI_V4=\"$nms::config::pri_v4\"\n";
-print CFG "PRI_V6=\"$nms::config::pri_v6\"\n\n";
-print CFG "SECONDARY=\"$nms::config::sec_hostname.$nms::config::tgname.gathering.org\"\n";
-print CFG "SEC_V4=\"$nms::config::sec_v4\"\n";
-print CFG "SEC_V6=\"$nms::config::sec_v6\"\n";
-close CFG;
diff --git a/bootstrap/fetch-debinstall.sh b/bootstrap/fetch-debinstall.sh
deleted file mode 100755
index 017b864..0000000
--- a/bootstrap/fetch-debinstall.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash -xe
-INSTALLER_DEST=$1
-DEBINSTROOT=http://ftp.no.debian.org/debian/dists
-
-mkdir -p ${INSTALLER_DEST}/{wheezy,jessie}/{amd64,i386}
-for DIST in wheezy jessie
-do
- for ARCH in i386 amd64;
- do
- for FILE in initrd.gz linux
- do
- wget ${DEBINSTROOT}/${DIST}/main/installer-${ARCH}/current/images/netboot/debian-installer/${ARCH}/${FILE} \
- -O ${INSTALLER_DEST}/${DIST}/${ARCH}/${FILE}
- done
- done
-done
-
diff --git a/bootstrap/fetch-ubuntulive.sh b/bootstrap/fetch-ubuntulive.sh
deleted file mode 100755
index 44d5d62..0000000
--- a/bootstrap/fetch-ubuntulive.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-INSTALLER_DEST=$1
-UBUNTU_MIRROR=http://no.releases.ubuntu.com/
-UBUNTU_VERSION=desktop
-UBUNTU_DIST="14.10"
-UBUNTU_ARCH="i386 amd64"
-TMP_MNT="/mnt/tmp"
-
-mkdir -p ${TMP_MNT}
-for DIST in ${UBUNTU_DIST}
-do
- for ARCH in ${UBUNTU_ARCH}
- do
- mkdir -p ${INSTALLER_DEST}/${UBUNTU_DIST}/${ARCH}
- wget ${UBUNTU_MIRROR}/${DIST}/ubuntu-${DIST}-${UBUNTU_VERSION}-${ARCH}.iso -O /tmp/ubuntu-${DIST}-${UBUNTU_VERSION}-${ARCH}.iso &&
- mount -o loop "/tmp/ubuntu-${DIST}-${UBUNTU_VERSION}-${ARCH}.iso" ${TMP_MNT}/ &&
- cp -Rv ${TMP_MNT}/* ${INSTALLER_DEST}/${DIST}/${ARCH}/ &&
- umount ${TMP_MNT}/
- done
- rmdir ${TMP_MNT}/
-done
diff --git a/bootstrap/init-sshkeys.sh b/bootstrap/init-sshkeys.sh
deleted file mode 100755
index 9427bad..0000000
--- a/bootstrap/init-sshkeys.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-set -e
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-ssh-keygen -P '' -f ~/.ssh/id_rsa -b 2048
-ssh-copy-id root@${PRIMARY}
-ssh-copy-id root@${SECONDARY}
diff --git a/bootstrap/install-dependencies.sh b/bootstrap/install-dependencies.sh
deleted file mode 100755
index c10224f..0000000
--- a/bootstrap/install-dependencies.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/bash -e
-
-if [ "$1" != "master" -a "$1" != "slave" -a "$1" != "boot" ]; then
- echo "Run as $0 <boot|master|slave>"
- exit
-fi
-
-# OK, we know the content of $0 is OK. I prefer sane names.
-ROLE=$1;
-
-# Resynchronize the package index before install
-
-apt-get -y update
-
-# Start by installing common packages. Remember to update
-# this when a new common dependency is discovered, plx.
-
-apt-get -y install \
- vim-nox \
- git \
- ntp \
- screen \
- tmux \
- dnsutils \
- build-essential \
- libnet-ip-perl \
- libnetaddr-ip-perl \
- libnet-telnet-cisco-perl \
- libnet-ping-external-perl \
- perl-modules \
- libdbi-perl \
- libdbd-pg-perl \
- libnet-telnet-perl \
- libnetaddr-ip-perl
-
-if [ "${ROLE}" == "boot" ]; then
- # Install-tasks specific for the _bootstrab box_ here
- echo "Installing for bootstrap"
- apt-get -y install \
- bind9utils
-fi
-
-if [ "${ROLE}" == "master" ]; then
- # Install-tasks specific for the _primary_ here
- echo "Installing for primary/master"
- apt-get -y install \
- isc-dhcp-server \
- bind9utils \
- bind9
-fi
-
-if [ "${ROLE}" == "slave" ]; then
- # Install-tasks specific for the _secondary_ here
- echo "Installing for secondary/slave"
- apt-get -y install \
- isc-dhcp-server \
- bind9utils \
- bind9
-fi
-
-echo "Dependency installation for ${ROLE} complete."
diff --git a/bootstrap/make-base-requires.sh b/bootstrap/make-base-requires.sh
deleted file mode 100755
index 8013cf6..0000000
--- a/bootstrap/make-base-requires.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-
-set -e
-
-BASE="/etc";
-if [ "$1" != "" ]
-then
- BASE=$1
- echo "Using base path ${BASE}"
-fi
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-cd ~/tgmanage
-bootstrap/update-tools.sh
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/install-dependencies.sh master"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/install-dependencies.sh slave"
-
-if [ "${BASE}" == "/etc" ]; then
- ssh -l root ${PRIMARY} "cp -pR /etc/bind /etc/bind.dist"
- ssh -l root ${PRIMARY} "cp -pR /etc/dhcp /etc/dhcp.dist"
-
- ssh -l root ${SECONDARY} "cp -pR /etc/bind /etc/bind.dist"
- ssh -l root ${SECONDARY} "cp -pR /etc/dhcp /etc/dhcp.dist"
-
- set +e
- ssh -l root ${PRIMARY} "rm /etc/bind/named.conf"
- ssh -l root ${PRIMARY} "rm /etc/dhcp/dhcpd.conf"
-
- ssh -l root ${SECONDARY} "rm /etc/dhcp/dhcpd.conf"
- ssh -l root ${SECONDARY} "rm /etc/bind/named.conf"
- set -e
-fi
-
-ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/conf-master/"
-ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/reverse/"
-ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/dynamic/"
-ssh -l root ${PRIMARY} "mkdir -p ${BASE}/dhcp/conf-v4/"
-ssh -l root ${PRIMARY} "mkdir -p ${BASE}/dhcp/conf-v6/"
-
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-dhcp6-init.sh"
-ssh -l root ${PRIMARY} "systemctl enable isc-dhcp-server"
-ssh -l root ${PRIMARY} "systemctl enable isc-dhcp6-server"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-named.pl master ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-dhcpd.pl ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-dhcpd6.pl ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-first-zones.pl ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-reverse4-files.pl master ${BASE}"
-
-ssh -l root ${SECONDARY} "mkdir -p ${BASE}/bind/conf-slave/"
-ssh -l root ${SECONDARY} "mkdir -p ${BASE}/bind/slave/"
-ssh -l root ${SECONDARY} "mkdir -p ${BASE}/dhcp/conf-v4/"
-ssh -l root ${SECONDARY} "mkdir -p ${BASE}/dhcp/conf-v6/"
-
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-dhcp6-init.sh"
-ssh -l root ${SECONDARY} "systemctl disable isc-dhcp-server"
-ssh -l root ${SECONDARY} "systemctl disable isc-dhcp6-server"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-dhcpd.pl ${BASE}"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-dhcpd6.pl ${BASE}"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-named.pl slave ${BASE}"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-reverse4-files.pl slave ${BASE}"
-
-set +e
-ssh -l root ${PRIMARY} "chown -R bind.bind ${BASE}/bind"
-ssh -l root ${SECONDARY} "chown -R bind.bind ${BASE}/bind"
-set -e
-
-ssh -l root ${PRIMARY} "echo THIS COPY OF TGMANAGE IS MANAGED FROM BOOTSTRAP SERVER > ~/tgmanage/NOTICE"
-ssh -l root ${SECONDARY} "echo THIS COPY OF TGMANAGE IS MANAGED FROM BOOTSTRAP SERVER > ~/tgmanage/NOTICE"
-
-# No point in _not_ running update-baseservice at this point....
-bootstrap/update-baseservice.sh ${BASE}
-
-# Set up PXE environment. NOTE that we assume that TFTP-server is the ${SECONDARY} (changed from older behaviour)
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-pxeboot.sh"
-
-# all done.
diff --git a/bootstrap/make-bind-include.pl b/bootstrap/make-bind-include.pl
deleted file mode 100755
index 880280e..0000000
--- a/bootstrap/make-bind-include.pl
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-
-unless ( (($#ARGV == 0 ) || ( $#ARGV == 1))
- && (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) )
-{
- print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n";
- exit 1;
-}
-
-my $role = $ARGV[0];
-
-my $base = "/etc";
-$base = $ARGV[1] if $#ARGV == 1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $bind_base = $base . "bind/";
-my $masterinclude = $bind_base . "named.master-include.conf";
-my $slaveinclude = $bind_base . "named.slave-include.conf";
-
-my $glob;
-my @configs;
-
-if ( $role eq "master" )
-{
- $glob = $bind_base . "conf-master/*.conf";
- @configs = glob($glob);
-
- open CONF, ">" . $masterinclude or die ( $! . " " . $masterinclude);
- foreach my $config ( @configs )
- {
- print CONF "include \"" . $config . "\";\n";
- }
- close CONF;
-}
-
-if ( $role eq "slave" )
-{
- $glob = $bind_base . "conf-slave/*.conf";
- @configs = glob($glob);
-
- open CONF, ">" . $slaveinclude or die ( $! . " " . $slaveinclude);
- foreach my $config ( @configs )
- {
- print CONF "include \"" . $config . "\";\n";
- }
- close CONF;
-}
diff --git a/bootstrap/make-dhcp6-init.sh b/bootstrap/make-dhcp6-init.sh
deleted file mode 100755
index 65f18a3..0000000
--- a/bootstrap/make-dhcp6-init.sh
+++ /dev/null
@@ -1,378 +0,0 @@
-#!/bin/bash
-
-DHCP4_DEFAULT="/etc/default/isc-dhcp-server"
-DHCP4_INIT="/etc/init.d/isc-dhcp-server"
-DHCP6_DEFAULT="/etc/default/isc-dhcp6-server"
-DHCP6_INIT="/etc/init.d/isc-dhcp6-server"
-
-if [ -e "${DHCP4_DEFAULT}" ];
-then
- echo "${DHCP4_DEFAULT} exists! Overwriting."
-fi
-if [ -e "${DHCP6_DEFAULT}" ];
-then
- echo "${DHCP6_DEFAULT} exists! Overwriting."
-fi
-
-set -e
-
-cat > ${DHCP4_DEFAULT}<<'_EOF'
-# Defaults for isc-dhcp-server initscript
-# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
-DHCPD_CONF=/etc/dhcp/dhcpd.conf
-
-# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
-DHCPD_PID=/var/run/dhcpd.pid
-
-# Additional options to start dhcpd with.
-# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
-OPTIONS="-4"
-
-# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
-# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
-# If no interface names are specified, dhcpd will identify all network interfaces
-# which are up, eliminating non-broadcast interfaces if possible, and listen
-# for DHCP broadcasts on each interface.
-INTERFACES=""
-_EOF
-
-cat > ${DHCP6_DEFAULT}<<'_EOF'
-# Defaults for isc-dhcp-server initscript
-# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
-DHCPD_CONF=/etc/dhcp/dhcpd6.conf
-
-# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
-DHCPD_PID=/var/run/dhcpd6.pid
-
-# Additional options to start dhcpd with.
-# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
-OPTIONS="-6"
-
-# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
-# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
-# If no interface names are specified, dhcpd will identify all network interfaces
-# which are up, eliminating non-broadcast interfaces if possible, and listen
-# for DHCP broadcasts on each interface.
-INTERFACES=""
-_EOF
-
-set +e
-
-if [ -e "${DHCP4_INIT}" ];
-then
- echo "${DHCP4_INIT} exists! Overwriting."
-fi
-if [ -e "${DHCP6_INIT}" ];
-then
- echo "${DHCP6_INIT} exists! Overwriting."
-fi
-
-set -e
-
-cat > ${DHCP4_INIT}<<'_EOF'
-#!/bin/sh
-#
-#
-
-### BEGIN INIT INFO
-# Provides: isc-dhcp-server
-# Required-Start: $remote_fs $network $syslog
-# Required-Stop: $remote_fs $network $syslog
-# Should-Start: $local_fs slapd $named
-# Should-Stop: $local_fs slapd
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: DHCP server
-# Description: Dynamic Host Configuration Protocol Server
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-
-test -f /usr/sbin/dhcpd || exit 0
-
-DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp-server}"
-
-# It is not safe to start if we don't have a default configuration...
-if [ ! -f "$DHCPD_DEFAULT" ]; then
- echo "$DHCPD_DEFAULT does not exist! - Aborting..."
- if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp-server" ]; then
- echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."
- fi
- exit 0
-fi
-
-. /lib/lsb/init-functions
-
-# Read init script configuration
-[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"
-
-NAME=dhcpd
-DESC="ISC DHCP server"
-# fallback to default config file
-DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd.conf}
-# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid
-if [ -z "$DHCPD_PID" ]; then
- DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1)
-fi
-DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd.pid}"
-
-test_config()
-{
- if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then
- echo "dhcpd self-test failed. Please fix $DHCPD_CONF."
- echo "The error was: "
- /usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF"
- exit 1
- fi
- touch /var/lib/dhcp/dhcpd.leases
-}
-
-# single arg is -v for messages, -q for none
-check_status()
-{
- if [ ! -r "$DHCPD_PID" ]; then
- test "$1" != -v || echo "$NAME is not running."
- return 3
- fi
- if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then
- test "$1" != -v || echo "$NAME is running."
- return 0
- else
- test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists."
- return 1
- fi
-}
-
-case "$1" in
- start)
- test_config
- log_daemon_msg "Starting $DESC" "$NAME"
- start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
- --exec /usr/sbin/dhcpd -- \
- -q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES
- sleep 2
-
- if check_status -q; then
- log_end_msg 0
- else
- log_failure_msg "check syslog for diagnostics."
- log_end_msg 1
- exit 1
- fi
- ;;
- stop)
- log_daemon_msg "Stopping $DESC" "$NAME"
- start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID"
- log_end_msg $?
- rm -f "$DHCPD_PID"
- ;;
- restart | force-reload)
- test_config
- $0 stop
- sleep 2
- $0 start
- if [ "$?" != "0" ]; then
- exit 1
- fi
- ;;
- status)
- echo -n "Status of $DESC: "
- check_status -v
- exit "$?"
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|force-reload|status}"
- exit 1
-esac
-
-exit 0
-
-_EOF
-
-cat > ${DHCP6_INIT}<<'_EOF'
-#!/bin/sh
-#
-#
-
-### BEGIN INIT INFO
-# Provides: isc-dhcp6-server
-# Required-Start: $remote_fs $network $syslog
-# Required-Stop: $remote_fs $network $syslog
-# Should-Start: $local_fs slapd $named
-# Should-Stop: $local_fs slapd
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: DHCP server v6
-# Description: Dynamic Host Configuration Protocol Server v6
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-
-test -f /usr/sbin/dhcpd || exit 0
-
-DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp6-server}"
-
-# It is not safe to start if we don't have a default configuration...
-if [ ! -f "$DHCPD_DEFAULT" ]; then
- echo "$DHCPD_DEFAULT does not exist! - Aborting..."
- if [ "$DHCPD_DEFAULT" = "/etc/default/isc-dhcp6-server" ]; then
- echo "Run 'dpkg-reconfigure isc-dhcp6-server' to fix the problem."
- fi
- exit 0
-fi
-
-. /lib/lsb/init-functions
-
-# Read init script configuration
-[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"
-
-NAME=dhcpd
-DESC="ISC DHCP server"
-# fallback to default config file
-DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd6.conf}
-# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid
-if [ -z "$DHCPD_PID" ]; then
- DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1)
-fi
-DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd6.pid}"
-
-test_config()
-{
- if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then
- echo "dhcpd self-test failed. Please fix $DHCPD_CONF."
- echo "The error was: "
- /usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF"
- exit 1
- fi
- touch /var/lib/dhcp/dhcpd.leases
-}
-
-# single arg is -v for messages, -q for none
-check_status()
-{
- if [ ! -r "$DHCPD_PID" ]; then
- test "$1" != -v || echo "$NAME is not running."
- return 3
- fi
- if read pid < "$DHCPD_PID" && ps -p "$pid" > /dev/null 2>&1; then
- test "$1" != -v || echo "$NAME is running."
- return 0
- else
- test "$1" != -v || echo "$NAME is not running but $DHCPD_PID exists."
- return 1
- fi
-}
-
-case "$1" in
- start)
- test_config
- log_daemon_msg "Starting $DESC" "$NAME"
- start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
- --exec /usr/sbin/dhcpd -- \
- -q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $INTERFACES
- sleep 2
-
- if check_status -q; then
- log_end_msg 0
- else
- log_failure_msg "check syslog for diagnostics."
- log_end_msg 1
- exit 1
- fi
- ;;
- stop)
- log_daemon_msg "Stopping $DESC" "$NAME"
- start-stop-daemon --stop --quiet --pidfile "$DHCPD_PID"
- log_end_msg $?
- rm -f "$DHCPD_PID"
- ;;
- restart | force-reload)
- test_config
- $0 stop
- sleep 2
- $0 start
- if [ "$?" != "0" ]; then
- exit 1
- fi
- ;;
- status)
- echo -n "Status of $DESC: "
- check_status -v
- exit "$?"
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|force-reload|status}"
- exit 1
-esac
-
-exit 0
-
-_EOF
-
-
-# Very Debian specific
-# Hacked together at TG15
-# FIXME :-D
-
-DHCP4_SYSTEMD="/run/systemd/generator.late/isc-dhcp-server.service"
-DHCP6_SYSTEMD="/run/systemd/generator.late/isc-dhcp6-server.service"
-
-cat > ${DHCP4_SYSTEMD}<<'_EOF'
-# Automatically generated by bootstrap
-
-[Unit]
-SourcePath=/etc/init.d/isc-dhcp-server
-Description=LSB: DHCP server
-Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
-After=remote-fs.target network-online.target systemd-journald-dev-log.socket local-fs.target slapd.service nss-lookup.target
-Wants=network-online.target
-Conflicts=shutdown.target
-
-[Service]
-Type=forking
-Restart=no
-TimeoutSec=5min
-IgnoreSIGPIPE=no
-KillMode=process
-GuessMainPID=no
-RemainAfterExit=yes
-SysVStartPriority=3
-ExecStart=/etc/init.d/isc-dhcp-server start
-ExecStop=/etc/init.d/isc-dhcp-server stop
-
-_EOF
-
-cat > ${DHCP6_SYSTEMD}<<'_EOF'
-# Automatically generated by bootstrap
-
-[Unit]
-SourcePath=/etc/init.d/isc-dhcp6-server
-Description=LSB: DHCP server v6
-Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
-After=remote-fs.target network-online.target systemd-journald-dev-log.socket local-fs.target slapd.service nss-lookup.target
-Wants=network-online.target
-Conflicts=shutdown.target
-
-[Service]
-Type=forking
-Restart=no
-TimeoutSec=5min
-IgnoreSIGPIPE=no
-KillMode=process
-GuessMainPID=no
-RemainAfterExit=yes
-SysVStartPriority=3
-ExecStart=/etc/init.d/isc-dhcp6-server start
-ExecStop=/etc/init.d/isc-dhcp6-server stop
-
-_EOF
-
-
-set +e
-
-chmod 755 ${DHCP4_INIT}
-chmod 755 ${DHCP6_INIT}
-touch /var/lib/dhcp/dhcpd.leases
-touch /var/lib/dhcp/dhcpd6.leases
-
-
diff --git a/bootstrap/make-dhcpd-include.pl b/bootstrap/make-dhcpd-include.pl
deleted file mode 100755
index 86673cb..0000000
--- a/bootstrap/make-dhcpd-include.pl
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-my $base = "/etc";
-$base = $ARGV[0] if $#ARGV > -1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $dhcpd_base = $base . "dhcp/";
-my $includeconfig = $dhcpd_base . "v4-generated-include.conf";
-
-my $glob = $dhcpd_base . "conf-v4/*.conf";
-my @configs = glob($glob);
-
-open CONF, ">" . $includeconfig or die ( $! . " " . $includeconfig);
-foreach my $config ( @configs )
-{
- print CONF "include \"" . $config . "\";\n";
-}
-close CONF;
-
-$includeconfig = $dhcpd_base . "v6-generated-include.conf";
-
-my $glob = $dhcpd_base . "conf-v6/*.conf";
-my @configs = glob($glob);
-
-open CONF, ">" . $includeconfig or die ( $! . " " . $includeconfig);
-foreach my $config ( @configs )
-{
- print CONF "include \"" . $config . "\";\n";
-}
-close CONF; \ No newline at end of file
diff --git a/bootstrap/make-dhcpd.pl b/bootstrap/make-dhcpd.pl
deleted file mode 100755
index a5919fc..0000000
--- a/bootstrap/make-dhcpd.pl
+++ /dev/null
@@ -1,293 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-use Net::IP;
-use NetAddr::IP;
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $base = "/etc";
-$base = $ARGV[0] if $#ARGV > -1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $dhcpd_base = $base . "dhcp/";
-my $dhcpd_conf = $dhcpd_base . "dhcpd.conf";
-my $dhcpd_pxeconf = $dhcpd_base . "v4-pxe-boot.conf";
-my $dhcpd_wlc_conf = $dhcpd_base . "v4-wlc.conf";
-my $dhcpd_voip_conf = $dhcpd_base . "v4-voip.conf";
-my $dhcpd_fap_conf = $dhcpd_base . "v4-fap.conf";
-
-# primary
-my $pri_range = Net::IP->new($nms::config::pri_net_v4) or die ("pri_range fail");
-my $pri_mask = $pri_range->mask();
-my $pri_net = $pri_range->ip();
-
-# secondary
-my $sec_range = Net::IP->new($nms::config::sec_net_v4) or die ("sec_range fail");
-my $sec_mask = $sec_range->mask();
-my $sec_net = $sec_range->ip();
-(my $sec_last = NetAddr::IP->new($nms::config::sec_net_v4)->last()) =~ s/\/[0-9]{1,2}//;
-(my $sec_gw = NetAddr::IP->new($nms::config::sec_net_v4)->first()) =~ s/\/[0-9]{1,2}//;
-my $sec_num = NetAddr::IP->new($nms::config::sec_net_v4)->num();
-my $sec_n = $sec_num - int($sec_num / 4); # don't use more than 1/4 of the net for DHCP
-(my $sec_first = NetAddr::IP->new($nms::config::sec_net_v4)->nth($sec_n)) =~ s/\/[0-9]{1,2}//;
-
-# Create main configuration file for DHCP
-if ( not -f $dhcpd_conf )
-{
- print STDERR "Creating file " . $dhcpd_conf . "\n";
- open DHCPDFILE, ">" . $dhcpd_conf or die ( $! . " " . $dhcpd_conf);
-
- print DHCPDFILE <<"EOF";
-# GENERATED BY make-dhcpd.pl
-
-# 60 min leasetime, 120 min max
-default-lease-time 3600;
-max-lease-time 7200;
-
-# make server authorative
-authoritative;
-
-# Don't let clients set their own FQDN
-ignore client-updates;
-
-# enable DDNS
-ddns-update-style interim;
-
-# set ddns-hostname
-if exists host-name {
- ddns-hostname = lcase(option host-name);
-} elsif exists fqdn.hostname {
- ddns-hostname = lcase(option fqdn.hostname);
-} else {
- ddns-hostname = binary-to-ascii(10, 8, "-", leased-address);
-}
-
-# set 'hardware' option to a variable
-# rebuilds the complete MAC in cases where you have a leading 0
-set hostmac = concat (
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
- suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
-);
-
-# Domain name (unless overriden elsewhere)
-option domain-name "$nms::config::tgname.gathering.org";
-option domain-name-servers $nms::config::pri_v4, $nms::config::sec_v4;
-
-key DHCP_UPDATER {
- algorithm HMAC-MD5.SIG-ALG.REG.INT;
- secret $nms::config::ddns_key;
-}
-
-# Servernetwork, Tele
-subnet $pri_net netmask $pri_mask {}
-
-# Servernetwork, NOC
-# Add small range at the end for PXE
-subnet $sec_net netmask $sec_mask {
- option subnet-mask $sec_mask;
- option routers $sec_gw;
-
- # No DDNS
- ddns-updates off;
- ddns-hostname = none;
- ddns-domainname = none;
-
- # supershort leasetime
- default-lease-time 300;
- max-lease-time 600;
-
- range $sec_first $sec_last;
-}
-
-include "/etc/dhcp/v4-revzones.conf";
-include "/etc/dhcp/v4-generated-include.conf";
-include "$dhcpd_pxeconf";
-include "$dhcpd_wlc_conf";
-include "$dhcpd_voip_conf";
-include "$dhcpd_fap_conf";
-
-EOF
- close DHCPDFILE;
-}
-
-# Create PXE-boot configuration file for DHCP
-if ( not -f $dhcpd_pxeconf )
-{
- print STDERR "Creating file " . $dhcpd_pxeconf . "\n";
- open PXEFILE, ">" . $dhcpd_pxeconf or die ( $! . " " . $dhcpd_pxeconf);
-
- print PXEFILE <<"EOF";
-option arch code 93 = unsigned integer 16;
-
-if option arch = 00:07 {
- filename "bootx64.efi";
-} else {
- filename "pxelinux.0";
-}
-
-next-server $nms::config::pxe_server_v4;
-
-EOF
-
- close PXEFILE;
-}
-
-# Create WLC configuration file
-if ( not -f $dhcpd_wlc_conf )
-{
- print STDERR "Creating file " . $dhcpd_wlc_conf . "\n";
- open WLCFILE, ">" . $dhcpd_wlc_conf or die ( $! . " " . $dhcpd_wlc_conf);
-
- print WLCFILE <<"EOF";
-option space WLC;
-option WLC.controller-address code 43 = text;
-
-class "access-points" {
- # Number of characters has to match the substring
- # I.e if "Access Point", you have to use (0, 12)
- match if substring (option vendor-class-identifier, 0, 12) = "Access Point";
-
- if exists agent.circuit-id {
- log( info, concat( "AP: ", hostmac, " - ", option vendor-class-identifier, " - ", option agent.circuit-id ));
- } else {
- log( info, concat( "AP: ", hostmac, " - ", option vendor-class-identifier ));
- }
-
- vendor-option-space WLC;
- option WLC.controller-address "$nms::config::wlc1_v4";
-}
-EOF
- close WLCFILE;
-}
-
-# Create VoIP config
-if ( not -f $dhcpd_voip_conf )
-{
- print STDERR "Creating file " . $dhcpd_voip_conf . "\n";
- open VOIPFILE, ">" . $dhcpd_voip_conf or die ( $! . " " . $dhcpd_voip_conf);
-
- print VOIPFILE <<"EOF";
-option space CiscoVOIP;
-option CiscoVOIP.cm-tftp-server code 150 = array of ip-address;
-
-class "cisco-voip-lan" {
- match if substring (option vendor-class-identifier, 0, 28) = "Cisco Systems, Inc. IP Phone";
- log( info, concat( "LOLOPHONE: " , option vendor-class-identifier ));
-
- vendor-option-space CiscoVOIP;
- option CiscoVOIP.cm-tftp-server $nms::config::voip1_v4;
- next-server $nms::config::voip1_v4;
-}
-
-class "cisco-voip-wlan" {
- match if substring (option vendor-class-identifier, 0, 33) = "Cisco Systems Inc. Wireless Phone";
- log( info, concat( "BANANAPHONE: " , option vendor-class-identifier ));
-
- vendor-option-space CiscoVOIP;
- option CiscoVOIP.cm-tftp-server $nms::config::voip1_v4;
- next-server $nms::config::voip1_v4;
-}
-EOF
- close VOIPFILE;
-}
-
-# Create FAP/Gondul config
-if ( not -f $dhcpd_fap_conf )
-{
- print STDERR "Creating file " . $dhcpd_fap_conf . "\n";
- open FAPFILE, ">" . $dhcpd_fap_conf or die ( $! . " " . $dhcpd_fap_conf);
-
- print FAPFILE <<"EOF";
-# FAP DHCP-configuration
-
-# Define structure of option 43 ( Zero Touch Protocol options)
-option space ztp;
-option ztp.image-file-name code 0 = text;
-option ztp.config-file-name code 1 = text;
-option ztp.image-file-type code 2 = text;
-option ztp.transfer-mode code 3 = text;
-option ztp.alt-image-file-name code 4 = text;
-
-# define option 150 - TFTP server (used for defining HTTP server for option 43)
-option option-150 code 150 = { ip-address };
-
-# define option 60 - used for classifying ZTP clients ("vendor class identifier")
-option vendor-class-identifier code 60 = text;
-
-# only allow FAP "clients"
-class "fap-vendor-class" {
- # Vendor-Class Option 60, length 21: "Juniper-ex2200-48t-4g"
- # Vendor-Class Option 60, length 21: "Juniper-ex3300-48p"
- match if substring(option vendor-class-identifier, 0, 10) = "Juniper-ex";
- log( info, concat( "FAP: ", hostmac, " (", option host-name, ") - ", option agent.circuit-id, " - ", option vendor-class-identifier ));
-}
-class "fap-mac" {
- # some Juniper switches won't send vendor-class-identifier
- match if (
- ( binary-to-ascii(16, 8, ":", substring(hardware, 1, 3)) = "44:f4:77" ) or
- ( binary-to-ascii(16, 8, ":", substring(hardware, 1, 3)) = "f0:1c:2d" )
- );
- if not exists vendor-class-identifier {
- log( info, concat( "FAP: ", hostmac, " (", option host-name, ") - ", option agent.circuit-id ));
- }
-}
-
-group {
- # No DDNS
- ddns-updates off;
- ddns-hostname = none;
- ddns-domainname = none;
-
- # set short leasetime, so that it times out while the switch rebooting
- default-lease-time 120;
- max-lease-time 120;
-
- # ZTP Settings
- vendor-option-space ztp;
- option option-150 $nms::config::fap_server_v4;
- option tftp-server-name "$nms::config::fap_server_v4";
- option ztp.transfer-mode "http";
- option ztp.config-file-name = concat("api/config/", (option agent.circuit-id));
- #option ztp.image-file-name "files/jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz";
-
- ### define ranges
-EOF
-
- foreach my $fap_net (@nms::config::fap_networks){
- my $fap_subnet = Net::IP->new($fap_net)->ip();
- my $fap_mask = Net::IP->new($fap_net)->mask();
- (my $fap_last = NetAddr::IP->new($fap_net)->last()) =~ s/\/[0-9]{1,2}//;
- (my $fap_gw = NetAddr::IP->new($fap_net)->first()) =~ s/\/[0-9]{1,2}//;
- my $fap_num = NetAddr::IP->new($fap_net)->num();
- my $fap_n = $fap_num - int($fap_num / 2); # don't use more than 1/2 of the net for DHCP
- (my $fap_first = NetAddr::IP->new($fap_net)->nth($fap_n)) =~ s/\/[0-9]{1,2}//;
-
- print FAPFILE <<"EOF";
- subnet $fap_subnet netmask $fap_mask {
- option subnet-mask $fap_mask;
- option routers $fap_gw;
- pool {
- range $fap_first $fap_last;
- allow members of "fap-vendor-class";
- allow members of "fap-mac";
- }
- }
-EOF
-
- }
-
- print FAPFILE "}\n";
- close FAPFILE;
-}
-
-
-
diff --git a/bootstrap/make-dhcpd6.pl b/bootstrap/make-dhcpd6.pl
deleted file mode 100755
index dc3f8b9..0000000
--- a/bootstrap/make-dhcpd6.pl
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-
-use Net::IP;
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $base = "/etc";
-$base = $ARGV[0] if $#ARGV > -1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $dhcpd_base = $base . "dhcp/";
-my $dhcpd_conf = $dhcpd_base . "dhcpd6.conf";
-my $dhcpd_pxeconf = $dhcpd_base . "v6-pxe-boot.conf";
-my $dhcpd_wlc_conf = $dhcpd_base . "v6-wlc.conf";
-my $dhcpd_voip_conf = $dhcpd_base . "v6-voip.conf";
-
-my $sec_net = Net::IP->new($nms::config::sec_net_v6)->short();
-my ($sec_first, $sec_last) = ("8000", "9999");
-
-# Create PXE-boot configuration file for DHCP
-if ( not -f $dhcpd_conf )
-{
- print STDERR "Creating file " . $dhcpd_conf . "\n";
- open DHCPDFILE, ">" . $dhcpd_conf or die ( $! . " " . $dhcpd_conf);
-
- print DHCPDFILE <<"EOF";
-# GENERATED BY make-dhcpd6.pl
-
-# IPv6 address valid lifetime
-# (at the end the address is no longer usable by the client)
-# (usual IPv6 default is 30 days)
-default-lease-time 3600;
-
-# IPv6 address preferred lifetime
-# (at the end the address is deprecated, i.e., the client should use
-# other addresses for new connections)
-# (usual IPv6 default is 7 days)
-preferred-lifetime 3600;
-
-# T1, the delay before Renew
-# (default is 1/2 preferred lifetime)
-option dhcp-renewal-time 1800;
-
-# T2, the delay before Rebind (if Renews failed)
-# (default is 3/4 preferred lifetime)
-option dhcp-rebinding-time 1800;
-
-# Enable RFC 5007 support
-allow leasequery;
-
-# Set preference to 255 (maximum) in order to avoid waiting for
-# additional servers when there is only one
-option dhcp6.preference 255;
-
-# Server side command to enable rapid-commit (2 packet exchange)
-option dhcp6.rapid-commit;
-
-# The delay before information-request refresh
-# (minimum is 10 minutes, maximum one day, default is to not refresh)
-# (set to 6 hours)
-option dhcp6.info-refresh-time 21600;
-
-# Don't let clients set their own FQDN
-ignore client-updates;
-
-# disable ddns
-ddns-update-style none;
-
-# make server authorative
-authoritative;
-
-# Global definitions for name server address(es) and domain search list
-option domain-name "$nms::config::tgname.gathering.org";
-option dhcp6.name-servers $nms::config::pri_v6, $nms::config::sec_v6;
-
-key DHCP_UPDATER {
- algorithm HMAC-MD5.SIG-ALG.REG.INT;
- secret $nms::config::ddns_key;
-}
-
-subnet6 $nms::config::pri_net_v6 {}
-subnet6 $nms::config::sec_net_v6 {
- range6 ${sec_net}${sec_first} ${sec_net}${sec_last};
-}
-
-include "/etc/dhcp/v6-generated-include.conf";
-include "$dhcpd_pxeconf";
-#include "$dhcpd_wlc_conf";
-#include "$dhcpd_voip_conf";
-
-EOF
- close DHCPDFILE;
-}
-
-# Create PXE-boot configuration file for DHCP
-if ( not -f $dhcpd_pxeconf )
-{
- print STDERR "Creating file " . $dhcpd_pxeconf . "\n";
- open PXEFILE, ">" . $dhcpd_pxeconf or die ( $! . " " . $dhcpd_pxeconf);
-
- print PXEFILE <<"EOF";
-option dhcp6.bootfile-url code 59 = string;
-option dhcp6.client-arch-type code 61 = array of unsigned integer 16;
-
-if option dhcp6.client-arch-type = 00:07 {
- option dhcp6.bootfile-url "tftp://[$nms::config::pxe_server_v6]/bootx64.efi";
-} else {
- # support a hypothetical BIOS system that can PXE boot over IPv6
- option dhcp6.bootfile-url "tftp://[$nms::config::pxe_server_v6]/pxelinux.0";
-}
-
-EOF
-
- close PXEFILE;
-}
-
-# Create WLC configuration file
-if ( not -f $dhcpd_wlc_conf )
-{
- print STDERR "Creating file " . $dhcpd_wlc_conf . "\n";
- open WLCFILE, ">" . $dhcpd_wlc_conf or die ( $! . " " . $dhcpd_wlc_conf);
-
- print WLCFILE <<"EOF";
-option space AP;
-option AP.server-address code 241 = array of ip-address;
-set vendor-string = option vendor-class-identifier;
-
-class "access-points" {
- match if substring (option vendor-class-identifier, 0, 8) = "Access Point";
- vendor-option-space AP;
- option AP.server-address $nms::config::wlc1_v6;
-}
-EOF
- close WLCFILE;
-}
-
-# Create VoIP config
-if ( not -f $dhcpd_voip_conf )
-{
- print STDERR "Creating file " . $dhcpd_voip_conf . "\n";
- open VOIPFILE, ">" . $dhcpd_voip_conf or die ( $! . " " . $dhcpd_voip_conf);
-
- print VOIPFILE <<"EOF";
-option space CiscoVOIP;
-option CiscoVOIP.cm-tftp-server code 150 = array of ip-address;
-
-class "cisco-voip-lan" {
- match if substring (option vendor-class-identifier, 0, 28) = "Cisco Systems, Inc. IP Phone";
- vendor-option-space CiscoVOIP;
- log( info, concat( "LOLOPHONE: " , option vendor-class-identifier ));
- option CiscoVOIP.cm-tftp-server $nms::config::voip1_v6;
- next-server $nms::config::voip1_v6;
-}
-
-class "cisco-voip-wlan" {
- match if substring (option vendor-class-identifier, 0, 33) = "Cisco Systems Inc. Wireless Phone";
- vendor-option-space CiscoVOIP;
- log( info, concat( "BANANAPHONE: " , option vendor-class-identifier ));
- option CiscoVOIP.cm-tftp-server $nms::config::voip1_v6;
- next-server $nms::config::voip1_v6;
-}
-EOF
- close VOIPFILE;
-}
-
diff --git a/bootstrap/make-first-zones.pl b/bootstrap/make-first-zones.pl
deleted file mode 100755
index 63cf1d0..0000000
--- a/bootstrap/make-first-zones.pl
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-use Net::IP;
-use NetAddr::IP;
-use POSIX qw(strftime);
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $base = "/etc";
-$base = $ARGV[0] if $#ARGV > -1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $serial = strftime("%Y%m%d", localtime(time())) . "01";
-
-my $zonefile;
-$zonefile = $base . "bind/" . $nms::config::tgname . ".gathering.org.zone";
-
-if ( not -f $zonefile )
-{
- print $zonefile . "\n";
- open MAINZONE, ">" . $zonefile or die $! . " " . $zonefile;
-
- print MAINZONE <<"EOF";
-\$TTL 3600
-@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
- $serial; serial
- 3600 ; refresh
- 1800 ; retry
- 608400 ; expire
- 3600 ) ; minimum and default TTL
-
- IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
- IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-
-$nms::config::pri_hostname IN A $nms::config::pri_v4
-$nms::config::pri_hostname IN AAAA $nms::config::pri_v6
-$nms::config::sec_hostname IN A $nms::config::sec_v4
-$nms::config::sec_hostname IN AAAA $nms::config::sec_v6
-ns1 IN CNAME $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
-ns2 IN CNAME $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-
-; Generated by make-all-config.sh on the bootstrapping/nms server.
-; Will not be overwritten unless it is missing ;)
-
-EOF
- close MAINZONE;
-}
-else { print "Skipped TG-zone, file exists.\n"; }
-
-$zonefile = $base . "bind/infra." . $nms::config::tgname . ".gathering.org.zone";
-if ( not -f $zonefile )
-{
- print $zonefile . "\n";
- open MAINZONE, ">" . $zonefile or die $! . " " . $zonefile;
-
- print MAINZONE <<"EOF";
-\$TTL 3600
-@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
- $serial; serial
- 3600 ; refresh
- 1800 ; retry
- 608400 ; expire
- 3600 ) ; minimum and default TTL
-
- IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
- IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-
-; Generated by make-all-config.sh on the bootstrapping/nms server.
-; Will not be overwritten unless it is missing ;)
-EOF
- close MAINZONE;
-}
-else { print "Skipped infra-zone, file exists.\n"; }
-
-# IPv6 PTR
-foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
- my $ipv6 = Net::IP->new($ipv6_net);
- (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
-
- $zonefile = $base . "bind/" . $ipv6zone . ".zone";
- if ( not -f $zonefile )
- {
- print $zonefile . "\n";
- open IPV6ZONE, ">" . $zonefile or die $! . " " . $zonefile;
-
- print IPV6ZONE <<"EOF";
-; autogenerated, and updated from dhcpd -- DO NOT TOUCH!
-\$TTL 3600
-@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
- $serial; serial
- 3600 ; refresh
- 1800 ; retry
- 608400 ; expire
- 3600 ) ; minimum and default TTL
-
- IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
- IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-
-; WARNING! Do not edit this file directly!
-; on the bootstrapping/nms server!
-EOF
-
- # print NS reverse
- my $ipv6addr = NetAddr::IP->new($ipv6_net);
- my $ip_pri_1 = NetAddr::IP->new($nms::config::pri_v6);
- if($ipv6addr->contains($ip_pri_1)){
- my $ip_pri = Net::IP->new( $nms::config::pri_v6 ) or die ( "Error, new Net::IP for " . $nms::config::pri_v6 );
- print IPV6ZONE $ip_pri->reverse_ip() . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n";
- }
-
- my $ip_sec_1 = NetAddr::IP->new($nms::config::sec_v6);
- if($ipv6addr->contains($ip_sec_1)){
- my $ip_sec = Net::IP->new( $nms::config::sec_v6 ) or die ( "Error, new Net::IP for " . $nms::config::sec_v6 );
- print IPV6ZONE $ip_sec->reverse_ip() . " IN PTR $nms::config::sec_hostname.$nms::config::tgname.gathering.org.\n";
- }
-
- close IPV6ZONE;
- }
- else { print "Skipped v6-reverse-zone, file exists.\n"; }
-}
diff --git a/bootstrap/make-missing-conf.pl b/bootstrap/make-missing-conf.pl
deleted file mode 100755
index 0159452..0000000
--- a/bootstrap/make-missing-conf.pl
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-use Net::IP;
-use NetAddr::IP;
-use POSIX qw(strftime);
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $serial = strftime("%Y%m%d", localtime(time())) . "01";
-
-unless ( (($#ARGV == 0 ) || ( $#ARGV == 1))
- && (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) )
-{
- print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n";
- exit 1;
-}
-
-my $role = $ARGV[0];
-
-my $base = "/etc";
-$base = $ARGV[1] if $#ARGV == 1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-
-print STDERR "Role is " . $role . "\n";
-print STDERR "Base dir is " . $base . "\n";
-
-my $bind_base = $base . "bind/";
-my $dhcpd_base = $base . "dhcp/";
-
-my $bind_conf_master = $bind_base . "conf-master/";
-my $bind_conf_slave = $bind_base . "conf-slave/";
-
-my $base_ipv4 = Net::IP->new( $nms::config::base_ipv4net );
-my ($cp_oct, $cs_oct, $ct_oct) = ($nms::config::base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
-
-while ( <STDIN> ){
- next if ( $_ =~ m/^(#|$)/); # comment or blank line
- my $line = $_;
- chomp $line;
- # <v4 net> <v6 net> <network-name>
- # 151.216.129.0/26 2a02:ed02:129a::/64 noc
- # we assume not smaller than /64 on v6
- die ("Invalid format on input.\n") if not $line =~ m/^((\d+\.){3}\d+\/\d+)\s+(([a-fA-F0-9]+\:){1,4}\:\/\d+)\s+([\w|-]+).*/;
- my ( $v4_net, $v6_net, $name ) = ( $1, $3, $5 );
-
- my $master_config = $bind_conf_master . $name . ".conf";
- my $slave_config = $bind_conf_slave . $name . ".conf";
- my $zone_file = $bind_base . "dynamic/$name.$nms::config::tgname.gathering.org.zone";
-
- # DHCP4
- my $dhcp_dynconf_dir = $dhcpd_base . "conf-v4/";
- my $dhconfig = $dhcp_dynconf_dir . $name . ".conf";
-
- if ( not -f $dhconfig ){
- print STDERR "Creating file " . $dhconfig . "\n";
-
- my $network = Net::IP->new($v4_net)->ip();
- my $netmask = Net::IP->new($v4_net)->mask();
- (my $first = NetAddr::IP->new($v4_net)->nth(3)) =~ s/\/[0-9]{1,2}//; # we reserve the three first addresses
- (my $last = NetAddr::IP->new($v4_net)->last()) =~ s/\/[0-9]{1,2}//;
- (my $gw = NetAddr::IP->new($v4_net)->first()) =~ s/\/[0-9]{1,2}//;
-
- open DFILE, ">" . $dhconfig or die ( $! . " " . $dhconfig);
-
- print DFILE <<"EOF";
-zone $name.$nms::config::tgname.gathering.org {
- primary $nms::config::ddns_to;
- key DHCP_UPDATER;
-}
-subnet $network netmask $netmask {
- option subnet-mask $netmask;
- option routers $gw;
- option domain-name "$name.$nms::config::tgname.gathering.org";
- ddns-domainname "$name.$nms::config::tgname.gathering.org";
- range $first $last;
-}
-
-EOF
-
- close DFILE;
- }
-
- # DHCP6
- $dhcp_dynconf_dir = $dhcpd_base . "conf-v6/";
- $dhconfig = $dhcp_dynconf_dir . $name . ".conf";
-
- if ( not -f $dhconfig ){
- print STDERR "Creating file " . $dhconfig . "\n";
-
- my $network = Net::IP->new($v6_net)->short();
- my ($first, $last) = ("1000", "9999");
-
- open DFILE, ">" . $dhconfig or die ( $! . " " . $dhconfig);
-
- print DFILE <<"EOF";
-zone $name.$nms::config::tgname.gathering.org {
- primary $nms::config::ddns_to;
- key DHCP_UPDATER;
-}
-subnet6 $v6_net {
- option domain-name "$name.$nms::config::tgname.gathering.org";
-
- range6 ${network}${first} ${network}${last};
-}
-
-EOF
-
- close DFILE;
- }
-
- # Create zone files for bind9 on master/primary
- if ( ( not -f $zone_file ) && ( $role eq "master" ) )
- {
- print STDERR "Creating file " . $zone_file . "\n";
- open ZFILE, ">" . $zone_file or die ( $! . " " . $zone_file);
- print ZFILE << "EOF";
-; Base reverse zones are updated from dhcpd -- DO NOT TOUCH!
-\$TTL 3600
-@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
- $serial ; serial
- 3600 ; refresh
- 1800 ; retry
- 608400 ; expire
- 3600 ) ; minimum and default TTL
-
- IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
- IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-\$ORIGIN $name.$nms::config::tgname.gathering.org.
-EOF
- close ZFILE;
- }
-
- # Create bind9 configuration files for zones.
- my $bind_file = "";
- $bind_file = $master_config if ( $role eq "master");
- $bind_file = $slave_config if ( $role eq "slave");
- die ("WTF, role does not match 'master' or 'slave'" ) if ( $bind_file eq "");
-
- if ( not -f $bind_file ){
- print STDERR "Creating file " . $bind_file . "\n";
- open NFILE, ">" . $bind_file or die ( $! . " " . $bind_file);
-
- print NFILE <<"EOF";
-zone "$name.$nms::config::tgname.gathering.org" {
- allow-transfer { ns-xfr; };
-EOF
-
- if ( $role eq "master" ) {
- print NFILE <<"EOF";
- type master;
- notify yes;
- allow-update { key DHCP_UPDATER; };
- file "dynamic/$name.$nms::config::tgname.gathering.org.zone";
-};
-EOF
- } else {
- print NFILE <<"EOF";
- type slave;
- notify no;
- masters { master_ns; };
- file "slave/$name.$nms::config::tgname.gathering.org.zone";
-};
-EOF
- }
-
- close NFILE;
- }
-}
diff --git a/bootstrap/make-named.pl b/bootstrap/make-named.pl
deleted file mode 100755
index 9eaf592..0000000
--- a/bootstrap/make-named.pl
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-use NetAddr::IP;
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-
-use Net::IP;
-use Net::IP qw(:PROC);
-
-unless ( (($#ARGV == 0 ) || ( $#ARGV == 1))
- && (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) )
-{
- print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n";
- exit 1;
-}
-
-my $role = $ARGV[0];
-
-my $base = "/etc";
-$base = $ARGV[1] if $#ARGV == 1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $bind_base = $base . "bind/";
-my $named_file = $bind_base . "named.conf";
-
-if ( -f $named_file )
-{
- print STDERR $named_file . " already exists. Cowardly refusing to continue.\n";
- exit;
-}
-
-my $run = `date +%Y%m%d-%H%M`;
-
-open NFILE, ">" . $named_file or die ( $! . " " . $named_file );
-
-chomp $run;
-my $rec_net = join("; ", @nms::config::rec_net);
-print NFILE <<EOF;
-// This named.conf was generated by make-named.pl at $run
-// The current version of make-named.pl should not overwrite this file.
-acl tg-nett { $nms::config::base_ipv4net; $nms::config::base_ipv6net; $rec_net; 127.0.0.0/8; ::1; };
-acl ns-xfr { $nms::config::sec_v4; $nms::config::sec_v6; $nms::config::pri_v4; $nms::config::pri_v6; $nms::config::noc_net; };
-acl ext-xfr { $nms::config::ext_xfer; };
-
-options {
- directory "/etc/bind";
- allow-recursion { tg-nett; };
- allow-query { any; };
- allow-transfer { ns-xfr; };
- recursion yes;
- auth-nxdomain no;
- listen-on-v6 { any; };
- statistics-file "/etc/bind/named.rndc-stats";
-};
-
-logging {
- category "default" { "debug"; };
- category "general" { "debug"; };
- category "database" { "debug"; };
- category "security" { "debug"; "stats"; };
- category "config" { "debug"; "stats"; };
- category "resolver" { "debug"; "stats"; };
- category "xfer-in" { "debug"; "stats"; };
- category "xfer-out" { "debug"; "stats"; };
- category "notify" { "debug"; "stats"; };
- category "client" { "debug"; };
- category "unmatched" { "debug"; };
- category "network" { "debug"; };
- category "update" { "debug"; };
- category "queries" { "stats"; };
- category "dispatch" { "debug"; };
- category "dnssec" { "debug"; };
- category "lame-servers" { "debug"; };
-
- channel "debug" {
- file "/etc/bind/nameddbg" versions 2 size 50m;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 9;
- };
-
- channel "stats" {
- file "/etc/bind/namedstats" versions 2 size 50m;
- print-time yes;
- print-category yes;
- print-severity yes;
- severity debug 3;
- };
-};
-
-key DHCP_UPDATER {
- algorithm HMAC-MD5.SIG-ALG.REG.INT;
- secret $nms::config::ddns_key;
-};
-EOF
-
-if ( $role eq "master" )
-{
- print NFILE <<EOF;
-
-zone "$nms::config::tgname.gathering.org" {
- type master;
- file "$nms::config::tgname.gathering.org.zone";
- notify yes;
- allow-transfer { ns-xfr; };
-};
-
-zone "infra.$nms::config::tgname.gathering.org" {
- type master;
- file "infra.$nms::config::tgname.gathering.org.zone";
- notify yes;
- allow-transfer { ns-xfr; };
-};
-
-EOF
-
- # IPv6 PTR
- foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
- my $ipv6 = Net::IP->new($ipv6_net);
- (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
-
-
- print NFILE <<EOF;
-zone "$ipv6zone" {
- type master;
- allow-update { key DHCP_UPDATER; };
- notify yes;
- file "$ipv6zone.zone";
- allow-transfer { ns-xfr; ext-xfr; };
-};
-
-EOF
- }
-
- print NFILE <<EOF;
-
-include "/etc/bind/named.conf.default-zones";
-include "named.reverse4.conf";
-include "named.master-include.conf";
-EOF
-
-}
-
-if ( $role eq "slave" )
-{
- print NFILE <<EOF;
-
-masters master_ns { $nms::config::pri_v6; $nms::config::pri_v4; };
-
-zone "$nms::config::tgname.gathering.org" {
- type slave;
- file "slave/$nms::config::tgname.gathering.org";
- notify no;
- masters { master_ns; };
-};
-
-zone "infra.$nms::config::tgname.gathering.org" {
- type slave;
- file "slave/infra.$nms::config::tgname.gathering.org";
- notify no;
- masters { master_ns; };
-};
-
-EOF
-
- # IPv6 PTR
- foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
- my $ipv6 = Net::IP->new($ipv6_net);
- (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
-
- print NFILE <<EOF;
-zone "$ipv6zone" {
- type slave;
- notify no;
- masters { master_ns; };
- file "slave/$ipv6zone";
- allow-transfer { ns-xfr; ext-xfr; };
-};
-
-EOF
- }
-
- print NFILE <<EOF;
-
-include "named.conf.default-zones";
-include "named.slave-reverse4.conf";
-include "named.slave-include.conf";
-EOF
-}
diff --git a/bootstrap/make-pxeboot.sh b/bootstrap/make-pxeboot.sh
deleted file mode 100755
index 4ee0063..0000000
--- a/bootstrap/make-pxeboot.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-#
-# This tool is to be executed by make-base-requires.sh
-# From tg14 we assume that TFTP server/PXE-boot server
-# is the Secondary/SMTP/TFTP box.
-#
-# TODO: Either rewrite this to be run at/from the bootstrapper,
-# and/or add support for ${BASE} redirection..
-
-apt-get -y install tftpd-hpa
-apt-get -y install nfs-kernel-server
-
-cat << END > /etc/default/tftpd-hpa
-TFTP_USERNAME="tftp"
-TFTP_DIRECTORY="/var/lib/tftpboot"
-TFTP_ADDRESS=":69"
-TFTP_OPTIONS="--secure"
-END
-
-mkdir -p /var/lib/tftpboot
-
-cd ~/tgmanage
-# NOTE, this step depends on an SCP of basic content from the bootstrap...
-# This should be done by bootstrap/update-tools ...
-cp -R pxe/* /var/lib/tftpboot
-
-bootstrap/fetch-debinstall.sh /var/lib/tftpboot/debian
-# bootstrap/fetch-ubuntulive.sh <- this tool does not exist xD
-# NOTE! The pxe/ directory contains an 'ubuntu' menu...
-# The files required to booting Ubuntu installer or live
-# must be fetched manually (for now)
-
-# Restart tftpd-hpa.service
-systemctl restart tftpd-hpa.service
-
diff --git a/bootstrap/make-reverse4-files.pl b/bootstrap/make-reverse4-files.pl
deleted file mode 100755
index 88f7a37..0000000
--- a/bootstrap/make-reverse4-files.pl
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-use strict;
-use Net::IP;
-use POSIX qw(strftime);
-
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-
-my $serial = strftime("%Y%m%d", localtime(time())) . "01";
-
-unless ( (($#ARGV == 0 ) || ( $#ARGV == 1))
- && (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) )
-{
- print STDERR "Invalid usage!\n$0 <master|slave> [basedir]\n";
- exit 1;
-}
-
-my $role = $ARGV[0];
-
-my $base = "/etc";
-$base = $ARGV[1] if $#ARGV == 1;
-$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
-
-my $bind_base = $base . "bind/";
-my $dhcpd_base = $base . "dhcp/";
-my $dhcp_revzones_file = $dhcpd_base . "v4-revzones.conf";
-my $bind_pri_revzones_file = $bind_base . "named.reverse4.conf";
-my $bind_sec_revzones_file = $bind_base . "named.slave-reverse4.conf";
-
-my $base_ipv4 = Net::IP->new($nms::config::base_ipv4net) or die ("base_v4 fail");
-my ($p_oct, $s_oct, $t_oct) = ($nms::config::base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
-my ($pp_oct, $ps_oct, $pt_oct, $pf_oct) = ($nms::config::pri_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/);
-my ($sp_oct, $ss_oct, $st_oct, $sf_oct) = ($nms::config::sec_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/);
-my $block;
-
-if ( $role eq "master" )
-{
- open DFILE, ">" . $dhcp_revzones_file or die $!;
- open NFILE, ">" . $bind_pri_revzones_file or die $!;
-}
-elsif ( $role eq "slave" )
-{
- open DFILE, ">" . $dhcp_revzones_file or die $!;
- open SFILE, ">" . $bind_sec_revzones_file or die $!;
-}
-else
-{
- die ("WTF, role is neither 'master' or 'slave'");
-}
-
-sub add_zone{
- my $ptr_zone = Net::IP->new("$p_oct.$s_oct.$t_oct.0/24") or die ("dhcp_reverse fail");
- my $dhcp_ptr = $ptr_zone->reverse_ip();
- (my $bind_ptr = $dhcp_ptr) =~ s/\.$//;
-
- if ( $role eq "master" )
- {
- # Generating IPv4-related reverse-stuff for
- # both bind9 and dhcp on master.
-
- print DFILE <<"EOF";
-zone $dhcp_ptr {
- primary $nms::config::ddns_to;
- key DHCP_UPDATER;
-}
-EOF
-
- print NFILE <<"EOF";
-// $block
-zone "$bind_ptr" {
- type master;
- allow-update { key DHCP_UPDATER; };
- notify yes;
- allow-transfer { ns-xfr; ext-xfr; };
- file "reverse/$bind_ptr.zone";
-};
-
-EOF
-
- my $zfilename = $bind_base . "reverse/" . $bind_ptr . ".zone";
- open ZFILE, ">", $zfilename;
-
- print ZFILE <<"EOF";
-; $zfilename
-; $block
-; Base reverse zones are updated from dhcpd -- DO NOT TOUCH!
-\$TTL 3600
-@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
- $serial ; serial
- 3600 ; refresh
- 1800 ; retry
- 608400 ; expire
- 3600 ) ; minimum and default TTL
-
- IN NS $nms::config::pri_hostname.$nms::config::tgname.gathering.org.
- IN NS $nms::config::sec_hostname.$nms::config::tgname.gathering.org.
-
-\$ORIGIN $bind_ptr.
-EOF
-
- # add reverse if DNS-servers belong to zone
- if ( ($pt_oct == $t_oct) && ($ps_oct == $s_oct) )
- {
- print ZFILE $pf_oct . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n";
- }
- if ( ($st_oct == $t_oct) && ($ss_oct == $s_oct) )
- {
- print ZFILE $sf_oct . " IN PTR $nms::config::sec_hostname.$nms::config::tgname.gathering.org.\n";
- }
- }
- else
- {
- # if not master, aka slave
- print SFILE <<"EOF";
-// $block
-zone "$bind_ptr" {
- type slave;
- notify no;
- file "slave/$bind_ptr.cache";
- masters { master_ns; };
- allow-transfer { ns-xfr; ext-xfr; };
-};
-
-EOF
- }
-}
-
-# for each /24 in the primary v4-net
-while (1){
- $block = $p_oct . "." . $s_oct . "." . $t_oct . ".0/24";
- my $current = Net::IP->new($block) or die ("Net::IP failed for " . $block);
-
- add_zone();
-
- if ( $current->last_int() == $base_ipv4->last_int() )
- {
- print STDERR "Reached last IP network. Finished.\n";
- last;
- }
- $t_oct++;
-}
-
-# for each specially defined /24
-foreach my $special_net (@nms::config::extra_nets){
- # a.b.c.d/24
- $block = $special_net;
- $base_ipv4 = Net::IP->new($special_net) or die ("base_v4 fail");
- ($p_oct, $s_oct, $t_oct) = ($special_net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
-
- add_zone();
-}
-
-# Close all files, even those that have never been opened ;)
-close DFILE;
-close NFILE;
-close SFILE;
diff --git a/bootstrap/update-baseservice.sh b/bootstrap/update-baseservice.sh
deleted file mode 100755
index c3c0c7e..0000000
--- a/bootstrap/update-baseservice.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-set -e
-
-BASE="";
-if [ -n $1 ]
-then
- BASE=$1
- echo "Using base path ${BASE}"
-fi
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-cd ~/tgmanage
-
-cat netlist.txt | ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-missing-conf.pl master ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-bind-include.pl master ${BASE}"
-ssh -l root ${PRIMARY} "~/tgmanage/bootstrap/make-dhcpd-include.pl ${BASE}"
-
-set +e
-ssh -l root ${PRIMARY} "chown bind.bind /etc/bind/dynamic/*.zone";
-set -e
-
-cat netlist.txt | ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-missing-conf.pl slave ${BASE}"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-bind-include.pl slave ${BASE}"
-ssh -l root ${SECONDARY} "~/tgmanage/bootstrap/make-dhcpd-include.pl ${BASE}"
diff --git a/bootstrap/update-tools.sh b/bootstrap/update-tools.sh
deleted file mode 100755
index dacb86b..0000000
--- a/bootstrap/update-tools.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-set -e
-
-source include/tgmanage.cfg.sh
-if [ -z ${PRIMARY} ]
-then
- echo "Not configured!";
- exit 1;
-fi;
-
-cd ~/tgmanage
-
-ssh -l root ${PRIMARY} "mkdir -p ~/tgmanage"
-ssh -l root ${SECONDARY} "mkdir -p ~/tgmanage"
-
-scp -r bootstrap root@${PRIMARY}:tgmanage/
-scp -r bootstrap root@${SECONDARY}:tgmanage/
-scp -r include root@${PRIMARY}:tgmanage/
-scp -r include root@${SECONDARY}:tgmanage/
-scp -r clients root@${PRIMARY}:tgmanage/
-scp -r clients root@${SECONDARY}:tgmanage/
-
-# use last years example files
-export TGNAME
-last_year=`perl -e '($y)=($ENV{TGNAME} =~ m/^tg(\d\d)$/); $y--; print "tg$y"'`
-scp -r examples/$last_year/pxe root@${SECONDARY}:tgmanage/
diff --git a/clients/dhcptail.pl b/clients/dhcptail.pl
deleted file mode 100755
index 9c2111f..0000000
--- a/clients/dhcptail.pl
+++ /dev/null
@@ -1,59 +0,0 @@
-#! /usr/bin/perl
-use DBI;
-use POSIX;
-use lib '../include';
-use nms;
-use strict;
-use Data::Dumper;
-use warnings;
-
-BEGIN {
- require "../include/config.pm";
- eval {
- require "../include/config.local.pm";
- };
-}
-
-my $year = $nms::config::tgname;
-$year =~ s/tg/20/; # hihi
-
-my %months = (
- Jan => 1,
- Feb => 2,
- Mar => 3,
- Apr => 4,
- May => 5,
- Jun => 6,
- Jul => 7,
- Aug => 8,
- Sep => 9,
- Oct => 10,
- Nov => 11,
- Dec => 12
-);
-
-my $realtime = 0;
-my ($dbh, $q,$check);
-$dbh = nms::db_connect();
-$q = $dbh->prepare("INSERT INTO dhcp (switch,time,ip,mac) VALUES((SELECT switch FROM switches WHERE ?::inet << subnet4 ORDER BY sysname LIMIT 1),?,?,?)");
-$check = $dbh->prepare("SELECT max(time)::timestamp - ?::timestamp < '0s'::interval as doit FROM dhcp;");
-
-open(SYSLOG, "tail -n 9999999 -F /var/log/syslog |") or die "Unable to tail syslog: $!";
-while (<SYSLOG>) {
- /(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d+)\s+(\d+:\d+:\d+).*DHCPACK on (\d+\.\d+\.\d+\.\d+) to (\S+) / or next;
- my $date = $year . "-" . $months{$1} . "-" . $2 . " " . $3 . " Europe/Oslo";
- my $machine = $5;
- my $via = $6;
- $check->execute($date);
- $dbh->commit;
- my $cond = $check->fetchrow_hashref();
- if (!defined($cond) or !defined($cond->{'doit'}) or $cond->{'doit'} eq '1') {
- if ($realtime != 1) {
- $realtime = 1;
- print "real time achieved...\n";
- }
- $q->execute($4,$date,$4,$machine);
- $dbh->commit;
- }
-}
-close SYSLOG;
diff --git a/clients/fetch-cubemap-munin.sh b/clients/fetch-cubemap-munin.sh
deleted file mode 100755
index 0cc62e2..0000000
--- a/clients/fetch-cubemap-munin.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-tgyear="tg16"
-reflector1="finn"
-reflector2="rey"
-
-if [ $# -eq 0 ]; then
- epoch_to=`date +%s`
- epoch_date="`date +%Y%m%d-%H%M`"
-else
- epoch_to=`date --date "$1" +%s`
- epoch_date="`date --date \"$1\" +%Y%m%d-%H%M`"
-fi
-let "epoch_from = epoch_to - (60 * 60 * 24)"
-
-wget -qO"/root/tgmanage/examples/$tgyear/streams/streamstats/cubemap_${reflector1}_detailed-$epoch_date.png" "http://munin.$tgyear.gathering.org/munin-cgi/munin-cgi-graph/$tgyear.gathering.org/${reflector1}.$tgyear.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
-wget -qO"/root/tgmanage/examples/$tgyear/streams/streamstats/cubemap_${reflector2}_detailed-$epoch_date.png" "http://munin.$tgyear.gathering.org/munin-cgi/munin-cgi-graph/$tgyear.gathering.org/${reflector2}.$tgyear.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
-
diff --git a/clients/ipv6-dns.pl b/clients/ipv6-dns.pl
deleted file mode 100755
index dcb059d..0000000
--- a/clients/ipv6-dns.pl
+++ /dev/null
@@ -1,138 +0,0 @@
-#! /usr/bin/perl
-use DBI;
-use Net::DNS;
-use Net::IP;
-use lib '../include';
-use nms;
-use strict;
-use warnings;
-
-BEGIN {
-require "../include/config.pm";
- eval {
- require "../include/config.local.pm";
- };
-}
-
-my $dbh = nms::db_connect() or die "Can't connect to database";
-my $res = Net::DNS::Resolver->new;
-
-$res->nameservers("$nms::config::pri_hostname.$nms::config::tgname.gathering.org");
-
-my $kname = 'DHCP_UPDATER';
-
-sub get_reverse {
- my ($ip) = shift;
- $ip = new Net::IP($ip) or return 0;
- my $a = $res->query($ip->reverse_ip, 'PTR') or return 0;
- foreach my $n ($a->answer) {
- return $n->{'ptrdname'}; # Return first element, ignore the rest (=
- }
- return 0;
-}
-
-sub any_quad_a {
- my ($host) = shift;
- my $a = $res->query($host, 'AAAA') or return 0;
- foreach my $n ($a->answer) {
- return 1 if ($n->{'type'} eq 'AAAA');
- }
- return 0;
-}
-
-print "Running automagic IPv6 DNS updates\n";
-while (1) {
-
- # Fetch visible IPv6 addresses from the last three minutes
- #my $q = $dbh->prepare("SELECT DISTINCT ON (ipv6.mac) ipv6.address AS v6, ipv6.mac, ipv4.address AS v4, ipv6.time - ipv6.age*'1 second'::interval FROM ipv6 LEFT JOIN ipv4 ON ipv4.mac = ipv6.mac WHERE ipv6.time > NOW()-'3 min'::interval ORDER BY ipv6.mac, ipv6.time DESC, mac")
- my $q = $dbh->prepare(
-"SELECT DISTINCT ON (v6) v6, ipv6.mac, ipv6.seen, v4
-FROM (SELECT DISTINCT ON (address) address AS v6, mac, seen FROM seen_mac WHERE family(address) = 6 AND seen > CURRENT_TIMESTAMP - '3 min'::interval) ipv6
-LEFT JOIN (SELECT DISTINCT ON (address) address AS v4, mac, seen FROM seen_mac WHERE family(address) = 4 AND seen > CURRENT_TIMESTAMP - '3 min'::interval) ipv4 ON ipv4.mac = ipv6.mac
-ORDER BY v6, ipv6.seen DESC, mac")
- or die "Can't prepare query";
- $q->execute() or die "Can't execute query";
-
- my $aaaas = 0;
- my $aaaa_errors = 0;
- my $ptrs = 0;
- my $ptr_errors = 0;
- my $update;
- my $v6;
- while (my $ref = $q->fetchrow_hashref()) {
- my $hostname = get_reverse($ref->{'v4'});
- if ($hostname) {
- $v6 = $ref->{'v6'};
- my @parts = split('\.', $hostname);
- my $hostname = shift @parts;
- my $domain = join('.', @parts);
- my $v6arpa = (new Net::IP($v6))->reverse_ip;
-
- # Don't add records for nets we don't control
- next if not $v6arpa =~ m/$nms::config::ipv6zone/;
-
- # Add IPv6 reverse
- if (!get_reverse($ref->{'v6'})) {
- $update = Net::DNS::Update->new($nms::config::ipv6zone);
- $update->push(pre => nxrrset("$v6arpa IN PTR")); # Only update if the RR is nonexistent
- $update->push(update => rr_add("$v6arpa IN PTR $hostname.$domain."));
- $update->sign_tsig($kname, $nms::config::ddns_key);
- my $reply = $res->send($update);
- if ($reply->header->rcode eq 'NOERROR') {
- $ptrs++;
- } else {
- $ptr_errors++;
- }
- }
-
- # Add IPv6 forward
- if (!any_quad_a("$hostname.$domain")) {
- $update = Net::DNS::Update->new($domain);
- $update->push(pre => nxrrset("$hostname.$domain. IN AAAA $v6")); # Only update if the RR is nonexistent
- $update->push(update => rr_add("$hostname.$domain. IN AAAA $v6"));
- $update->sign_tsig($kname, $nms::config::ddns_key);
- my $reply = $res->send($update);
- if ($reply->header->rcode eq 'NOERROR') {
- $aaaas++;
- } else {
- $aaaa_errors++;
- }
- }
- }
- }
- print "Added $ptrs PTR records. $ptr_errors errors occured.\n";
- print "Added $aaaas AAAA records. $aaaa_errors errors occured.\n";
-
-
- # Remove old PTR records, that is, for hosts we haven't seen the last four
- # hours, but not older than four and a half hours, as it would take forever to
- # try to delete everything. FIXME: Query the zone file and diff against the
- # database, to avoid running as many NS-updates as tuples in the result set.
-
- $q = $dbh->prepare("SELECT DISTINCT address AS v6 FROM seen_mac WHERE seen BETWEEN CURRENT_TIMESTAMP - '4 hours'::interval AND CURRENT_TIMESTAMP - '4 hours 30 minutes'::interval")
- or die "Can't prepare query";
- $q->execute() or die "Can't execute query";
-
- my $i = 0;
- my $errors = 0;
- while (my $ref = $q->fetchrow_hashref()) {
- $v6 = $ref->{'v6'};
- if (get_reverse($v6)) {
- my $v6arpa = (new Net::IP($v6))->reverse_ip;
- my $update = Net::DNS::Update->new($nms::config::ipv6zone);
- $update->push(pre => yxrrset("$v6arpa PTR")); # Only update if the RR exists
- $update->push(update => rr_del("$v6arpa IN PTR"));
- $update->sign_tsig($kname, $nms::config::ddns_key);
- my $reply = $res->send($update);
- if ($reply->header->rcode eq 'NOERROR') {
- $i++;
- } else {
- $errors++;
- }
- }
- }
-
- print "Deleted $i old PTR records. $errors errors occured.\n";
- print "Sleeping for two minutes.\n";
- sleep(120);
-}
diff --git a/clients/ipv6-stats.pl b/clients/ipv6-stats.pl
deleted file mode 100644
index ab76cc9..0000000
--- a/clients/ipv6-stats.pl
+++ /dev/null
@@ -1,98 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use lib '../include';
-use nms;
-use Data::Validate::IP qw(is_public_ipv6 is_public_ipv4 is_private_ipv4);
-use Net::MAC qw(mac_is_unicast);
-
-my $dbh = nms::db_connect();
-$dbh->{AutoCommit} = 0;
-
-while (1) {
- my $coregws = $dbh->prepare("SELECT ip, community, sysname FROM switches WHERE switchtype <> 'dlink3100'")
- or die "Can't prepare query: $!";
- $coregws->execute;
-
- my %seen = ();
- my $num_v4 = 0;
- my $num_v6 = 0;
- while (my $ref = $coregws->fetchrow_hashref) {
- print STDERR "Querying ".$ref->{'sysname'}." ...\n";
- my $snmp;
- eval {
- $snmp = nms::snmp_open_session($ref->{'ip'}, $ref->{'community'});
- };
- warn $@ if $@;
- next if not $snmp;
-
- # Pull in old media table that does not support ipv6.
- my $ip_phys_table = fetch($snmp, ('ipNetToMediaNetAddress', 'ipNetToMediaPhysAddress'));
- for my $entry (values %$ip_phys_table) {
- my $ip_addr = $entry->{'ipNetToMediaNetAddress'};
- my $mac = Net::MAC->new(
- mac => nms::convert_mac($entry->{'ipNetToMediaPhysAddress'}),
- die => 0,
- );
-
- next if $mac->get_base() != 16 || $mac->get_mac() eq ''; # We only support base 16 addresses
- next if (!is_public_ipv4($ip_addr) && !is_private_ipv4($ip_addr)); # We consider RFC1918 public
-
- $seen{$ip_addr} = $mac->get_mac();
- $num_v4++;
- }
-
- # Pull in new media table with IPv6 support
- $ip_phys_table = $snmp->gettable('ipNetToPhysicalTable');
- for my $entry (values %$ip_phys_table) {
- my $type = $entry->{'ipNetToPhysicalNetAddressType'};
- my $ip_addr = undef;
- my $mac = Net::MAC->new(
- mac => nms::convert_mac($entry->{'ipNetToPhysicalPhysAddress'}),
- die => 0,
- );
-
- if ($type != 2) {
- warn "$ip_addr is of unexpected type $type (should be 2)! Tell Berge.\n";
- next;
- }
-
- $ip_addr = nms::convert_ipv6($entry->{'ipNetToPhysicalNetAddress'});
-
- next if $mac->get_base() != 16 || $mac->get_mac() eq ''; # We only support base 16 addresses
- next if not is_public_ipv6($ip_addr);
-
- $seen{$ip_addr} = $mac->get_mac();
- $num_v6++;
- }
-
- }
-
- # Populate database
- my $i = 0;
- foreach my $ip_addr (keys %seen) {
- $i++;
- my $q = $dbh->do('INSERT INTO seen_mac (address, mac) VALUES (?, ?)', undef, $ip_addr, $seen{$ip_addr})
- or die "Can't execute query: $!";
- }
-
- $dbh->commit;
- print "Collected $num_v6 IPv6 addresses and $num_v4 IPv4 addresses. $i unique addresses.\n";
- print "Sleeping for 60 seconds ...\n";
- sleep(60);
-}
-
-
-# Fetch provided fields from a single table returning {iid => {tag => val}}
-sub fetch {
- my $session = shift;
- my @vars = map { new SNMP::Varbind([$_]) } @_;
- my $data = {};
- foreach my $result (@{$session->bulkwalk(0, 8, new SNMP::VarList(@vars))}) {
- foreach my $entry (@$result) {
- $data->{$entry->iid}->{$entry->tag} = $entry->val;
- }
- }
- return $data;
-}
-
diff --git a/clients/ping.pl b/clients/ping.pl
deleted file mode 100755
index d945917..0000000
--- a/clients/ping.pl
+++ /dev/null
@@ -1,100 +0,0 @@
-#! /usr/bin/perl
-use DBI;
-use POSIX;
-use Time::HiRes;
-use Net::Oping;
-use strict;
-use warnings;
-use Data::Dumper;
-
-use lib '../include';
-use nms;
-
-$|++;
-my $dbh = nms::db_connect();
-$dbh->{AutoCommit} = 0;
-$dbh->{RaiseError} = 1;
-
-my $q = $dbh->prepare("SELECT switch,host(mgmt_v4_addr) as ip,host(mgmt_v6_addr) as secondary_ip FROM switches WHERE mgmt_v4_addr is not null ORDER BY random()");
-my $lq = $dbh->prepare("SELECT linknet,addr1,addr2 FROM linknets WHERE addr1 is not null and addr2 is not null");
-
-while (1) {
- # ping loopbacks
- my $ping = Net::Oping->new;
- $ping->timeout(0.3);
-
- $q->execute;
- my %ip_to_switch = ();
- my %secondary_ip_to_switch = ();
- while (my $ref = $q->fetchrow_hashref) {
- my $switch = $ref->{'switch'};
-
- my $ip = $ref->{'ip'};
- $ping->host_add($ip);
- $ip_to_switch{$ip} = $switch;
-
- my $secondary_ip = $ref->{'secondary_ip'};
- if (defined($secondary_ip)) {
- $ping->host_add($secondary_ip);
- $secondary_ip_to_switch{$secondary_ip} = $switch;
- }
- }
- my $result = $ping->ping();
- my %dropped = %{$ping->get_dropped()};
- die $ping->get_error if (!defined($result));
-
- $dbh->do('COPY ping (switch, latency_ms) FROM STDIN'); # date is implicitly now.
- my $drops = 0;
- while (my ($ip, $latency) = each %$result) {
- my $switch = $ip_to_switch{$ip};
- next if (!defined($switch));
-
- if (!defined($latency)) {
- $drops += $dropped{$ip};
- }
- $latency //= "\\N";
- $dbh->pg_putcopydata("$switch\t$latency\n");
- }
- if ($drops > 0) {
- print "$drops ";
- }
- $dbh->pg_putcopyend();
-
- $dbh->do('COPY ping_secondary_ip (switch, latency_ms) FROM STDIN'); # date is implicitly now.
- while (my ($ip, $latency) = each %$result) {
- my $switch = $secondary_ip_to_switch{$ip};
- next if (!defined($switch));
-
- $latency //= "\\N";
- $dbh->pg_putcopydata("$switch\t$latency\n");
- }
- $dbh->pg_putcopyend();
-
- $dbh->commit;
- # ping linknets
- $ping = Net::Oping->new;
- $ping->timeout(0.3);
-
- $lq->execute;
- my @linknets = ();
- while (my $ref = $lq->fetchrow_hashref) {
- push @linknets, $ref;
- $ping->host_add($ref->{'addr1'});
- $ping->host_add($ref->{'addr2'});
- }
- if (@linknets) {
- $result = $ping->ping();
- die $ping->get_error if (!defined($result));
-
- $dbh->do('COPY linknet_ping (linknet, latency1_ms, latency2_ms) FROM STDIN'); # date is implicitly now.
- for my $linknet (@linknets) {
- my $id = $linknet->{'linknet'};
- my $latency1 = $result->{$linknet->{'addr1'}} // '\N';
- my $latency2 = $result->{$linknet->{'addr2'}} // '\N';
- $dbh->pg_putcopydata("$id\t$latency1\t$latency2\n");
- }
- $dbh->pg_putcopyend();
- }
- $dbh->commit;
-}
-
diff --git a/clients/smanagrun.pl b/clients/smanagrun.pl
deleted file mode 100755
index 9df4b96..0000000
--- a/clients/smanagrun.pl
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/perl
-#
-#
-
-use warnings;
-use strict;
-use Net::Telnet;
-use DBI;
-use POSIX;
-use Data::Dumper::Simple;
-use lib '../include';
-use nms;
-
-BEGIN {
- require "../include/config.pm";
- eval {
- require "../include/config.local.pm";
- };
-}
-# Tweak and check
-my $password = '';
-my $delaytime = 30;
-
-my $dbh = db_connect();
-$dbh->{AutoCommit} = 0;
-
-my $spoll = $dbh->prepare("
-SELECT
- addr,
- sysname
-FROM
- squeue
-WHERE
- processed = 'f' AND
- disabled = 'f' AND
- (locked='f' OR now() - updated > '10 minutes'::interval) AND
- (delay IS NULL OR delay < now())
-ORDER BY
- priority DESC,
- added
-LIMIT 1");
-my $sgetallpoll = $dbh->prepare("
-SELECT
- id,
- gid,
- addr,
- sysname,
- cmd
-FROM
- squeue
-WHERE
- sysname = ? AND
- disabled = 'f' AND
- processed = 'f'
-ORDER BY
- priority DESC,
- added");
-
-my $slock = $dbh->prepare("UPDATE squeue SET locked = 't', updated=now() WHERE sysname = ?")
- or die "Unable to prepare slock";
-my $sunlock = $dbh->prepare("UPDATE squeue SET locked = 'f', updated=now() WHERE sysname = ?")
- or die "Unable to prepare sunlock";
-my $sresult = $dbh->prepare("UPDATE squeue SET updated = now(), result = ?,
- processed = 't' WHERE id = ?")
- or die "Unable to prepare sresult";
-my $sdelay = $dbh->prepare("UPDATE squeue SET delay = now() + delaytime, updated=now(), result = ? WHERE sysname = ?")
- or die "Unable to prepae sdelay";
-
-sub mylog {
- my $msg = shift;
- my $time = POSIX::ctime(time);
- $time =~ s/\n.*$//;
- printf STDERR "[%s] %s\n", $time, $msg;
-}
-
-while (1) {
- $spoll->execute() or die "Could not execute spoll";
- my $switch = $spoll->fetchrow_hashref();
- if (!defined($switch)) {
- $dbh->commit;
- mylog("No available switches in pool, sleeping.");
- sleep 10;
- next;
- }
- $slock->execute($switch->{sysname});
- $dbh->commit();
-
- if ($switch->{'locked'}) {
- mylog("WARNING: Lock timed out on $switch->{'ip'}, breaking lock");
- }
-
- mylog("Connecting to $switch->{sysname} on $switch->{addr}");
- eval {
- my $ssh = switch_connect_ssh($switch->{addr});
- my $conn = $ssh->{telnet};
- if (!defined($conn)) {
- mylog("Could not connect to ".$switch->{sysname}."(".$switch->{addr}.")");
- $sdelay->execute("Could not connect to switch, delaying...", $switch->{sysname});
- $sunlock->execute($switch->{sysname});
- $dbh->commit();
- next;
- }
- my $error;
- $error = $sgetallpoll->execute($switch->{sysname});
- if (!$error) {
- print "Could not execute sgetallpoll\n".$dbh->errstr();
- switch_disconnect($ssh);
- next;
- }
- while (my $row = $sgetallpoll->fetchrow_hashref()) {
- my $sysname = $row->{sysname};
- my @data;
- my @commands = split(/[\r\n\000]+/, $row->{cmd});
- for my $cmd (@commands) {
- next unless $cmd =~ /\S/; # ignorer linjer med kun whitespace
- $cmd =~ s/%SYSNAME%/$sysname/g;
- print "sysname: $sysname cmd: $cmd\n";
- push @data, "# $cmd";
- if ($cmd =~ /^#\s*require-version\s+(.*\S)\s*$/) {
- my $required_version = $1;
- my $version;
- foreach my $line (switch_exec("show version", $conn)) {
- if ($line =~ /^JUNOS Base OS boot \[(.*)\]/) {
- $version = $1;
- } elsif ($line =~ /^Junos: (.*\S)/) {
- $version = $1;
- }
- last if defined $version;
- }
- if ($version ne $required_version) {
- push @data, "# '$version' != '$required_version', aborting script";
- last;
- } else {
- push @data, "# Version matches";
- }
- } elsif ($cmd =~ s/^!//) {
- push @data, switch_exec($cmd, $conn, 1);
- } else {
- push @data, switch_exec($cmd, $conn);
- }
- }
- my $result = join("\n", @data);
- $sresult->execute($result, $row->{id});
- }
- switch_disconnect($ssh);
- $sunlock->execute($switch->{sysname});
- };
- if ($@) {
- warn $@;
- chomp(my $err = $@);
- $sdelay->execute($err . ", delaying...", $switch->{sysname});
- $sunlock->execute($switch->{sysname});
- $dbh->commit();
- }
-}
-
diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl
deleted file mode 100755
index 2f5e785..0000000
--- a/clients/snmpfetchng.pl
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use DBI;
-use POSIX;
-#use Time::HiRes qw(time);
-use SNMP;
-use Data::Dumper;
-use lib '../include';
-use nms;
-
-SNMP::initMib();
-SNMP::addMibDirs("/srv/tgmanage/mibs/StandardMibs");
-SNMP::addMibDirs("/srv/tgmanage/mibs/JuniperMibs");
-SNMP::addMibDirs("/srv/tgmanage/mibs");
-SNMP::loadModules('ALL');
-
-our $dbh = nms::db_connect();
-$dbh->{AutoCommit} = 0;
-$dbh->{RaiseError} = 1;
-
-my $qualification = <<"EOF";
-(last_updated IS NULL OR now() - last_updated > poll_frequency)
-AND (locked='f' OR now() - last_updated > '15 minutes'::interval)
-AND mgmt_v4_addr is not null
-EOF
-
-# Borrowed from snmpfetch.pl
-our $qswitch = $dbh->prepare(<<"EOF")
-SELECT
- sysname,switch,host(mgmt_v4_addr) as ip,community,
- DATE_TRUNC('second', now() - last_updated - poll_frequency) AS overdue
-FROM
- switches
-WHERE
-$qualification
-ORDER BY
- overdue DESC
-LIMIT ?
-EOF
- or die "Couldn't prepare qswitch";
-our $qlock = $dbh->prepare("UPDATE switches SET locked='t', last_updated=now() WHERE switch=?")
- or die "Couldn't prepare qlock";
-our $qunlock = $dbh->prepare("UPDATE switches SET locked='f', last_updated=now() WHERE switch=?")
- or die "Couldn't prepare qunlock";
-my @switches = ();
-
-my $sth = $dbh->prepare("INSERT INTO snmp (switch,data) VALUES((select switch from switches where sysname=?), ?)");
-
-sub mylog
-{
- my $msg = shift;
- my $time = POSIX::ctime(time);
- $time =~ s/\n.*$//;
- printf STDERR "[%s] %s\n", $time, $msg;
-}
-
-sub populate_switches
-{
- @switches = ();
- my $limit = $nms::config::snmp_max;
- $qswitch->execute($limit)
- or die "Couldn't get switch";
- $dbh->commit;
- while (my $ref = $qswitch->fetchrow_hashref()) {
- push @switches, {
- 'sysname' => $ref->{'sysname'},
- 'id' => $ref->{'switch'},
- 'mgtip' => $ref->{'ip'},
- 'community' => $ref->{'community'}
- };
- }
-}
-
-sub inner_loop
-{
- populate_switches();
- my $poll_todo = "";
- for my $refswitch (@switches) {
- my %switch = %{$refswitch};
- $poll_todo .= "$switch{'sysname'} ";
-
- $switch{'start'} = time;
- $qlock->execute($switch{'id'})
- or die "Couldn't lock switch";
- $dbh->commit;
- my $s = SNMP::Session->new(DestHost => $switch{'mgtip'},
- Community => $switch{'community'},
- UseEnums => 1,
- Version => '2');
- my $ret = $s->bulkwalk(0, 10, @nms::config::snmp_objects, sub{ callback(\%switch, @_); });
- if (!defined($ret)) {
- mylog("Fudge: ". $s->{'ErrorStr'});
- }
- }
- mylog( "Polling " . @switches . " switches: $poll_todo");
- SNMP::MainLoop(10);
-}
-
-sub callback{
- my @top = $_[1];
- my %switch = %{$_[0]};
- my %tree;
- my %ttop;
- my %nics;
- my @nicids;
-
- for my $ret (@top) {
- for my $var (@{$ret}) {
- for my $inner (@{$var}) {
- my ($tag,$type,$name,$iid, $val) = ( $inner->tag ,$inner->type , $inner->name, $inner->iid, $inner->val);
- if ($tag eq "ifPhysAddress") {
- next;
- }
- $tree{$iid}{$tag} = $val;
- if ($tag eq "ifIndex") {
- push @nicids, $iid;
- }
- }
- }
- }
-
- my %tree2;
- for my $nic (@nicids) {
- $tree2{'ports'}{$tree{$nic}{'ifName'}} = $tree{$nic};
- delete $tree{$nic};
- }
- for my $iid (keys %tree) {
- for my $key (keys %{$tree{$iid}}) {
- $tree2{'misc'}{$key}{$iid} = $tree{$iid}{$key};
- }
- }
- $sth->execute($switch{'sysname'}, JSON::XS::encode_json(\%tree2));
- $qunlock->execute($switch{'id'})
- or die "Couldn't unlock switch";
- $dbh->commit;
- mylog( "Polled $switch{'sysname'} in " . (time - $switch{'start'}) . "s.");
-}
-while (1) {
- inner_loop();
-}
diff --git a/fap/README.md b/fap/README.md
deleted file mode 100755
index c8278f5..0000000
--- a/fap/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# FAP - Fast and Agile Provisioning
-
-Tools (DHCP daemon + HTTP daemon + DB) for managing provisioning towards a large number of factory default Juniper switches (EX2200) using ZTP (Zero Touch Protocol) over DHCP relays.
-
-The project is built with Python (>3.4.0) and PostgreSQL (>9.3.5).
-
-Licensed under the GNU GPL, version 2. See the included COPYING file.
-
-
-
-## Usage
-Launch the python scripts for fap from tgmanage directory.
-
- apt-get install apache2 php5 python3 python3-psycopg2 php5-pgsql
- a2enmod cgi
- a2enmod rewrite
-
-
-
-### HTTPD
- j@lappie:~/git/tgmanage$ sudo python3 fap/httpd/server_http.py
-
-Example: <a href="httpd/terminal.log">httpd/terminal.log</a>
-
-
-### DHCPD
- j@lappie:~/git/tgmanage$ sudo python3 fap/dhcpd/server_dhcp.py
-
-Example: <a href="dhcpd/terminal.log">dhcpd/terminal.log</a>
-
-
-# TODO
-* DONE: Support for IPv6 management
-* Process multiple HTTP request simultaneously
-* Support for only pushing JunOS image to switch - no config (for backup switches)
-* Try/catch on whole ethernet frame in DHCPD
-* Timestamps on each line in log both from DHCPD and HTTPD
diff --git a/fap/database/README.md b/fap/database/README.md
deleted file mode 100755
index 3d014d3..0000000
--- a/fap/database/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Database layout
-
-PostgreSQL
-
-**Tables**
-```
-bootstrap-> \dt
- List of relations
- Schema | Name | Type | Owner
---------+----------+-------+-----------
- public | switches | table | bootstrap
-```
-
-
-**Table structure**
-```
-fap=> \d switches
- Table "public.switches"
- Column | Type | Modifiers
--------------------+------------------------+-------------------------------------------------------
- id | integer | not null default nextval('switches_id_seq'::regclass)
- hostname | character varying(20) |
- distro_name | character varying(100) |
- distro_phy_port | character varying(100) |
- mgmt_v4_addr | character varying(15) |
- mgmt_v4_cidr | smallint |
- mgmt_v4_gw | character varying(15) |
- mgmt_v6_cidr | smallint |
- mgmt_v6_addr | character varying(35) |
- mgmt_v6_gw | character varying(35) |
- mgmt_vlan | smallint |
- last_config_fetch | integer |
- current_mac | character varying(17) |
- model | character varying(20) |
- traffic_vlan | integer |
-```
-
-
-**Sample content in DB**
-```
-fap=> select * from switches where [...] order by id desc;
- id | hostname | distro_name | distro_phy_port | mgmt_v4_addr | mgmt_v4_cidr | mgmt_v4_gw | mgmt_v6_cidr | mgmt_v6_addr | mgmt_v6_gw | mgmt_vlan | last_config_fetch | current_mac | model | traffic_vlan
------+--------------------+----------------+-----------------+-----------------+--------------+-----------------+--------------+---------------------+-------------------+-----------+-------------------+-------------------+-------+--------------
- 447 | sw1-crew | rs1.crew | ge-0/0/39 | 151.216.183.66 | 27 | 151.216.183.65 | 64 | 2a02:ed02:1832::66 | 2a02:ed02:1832::1 | 666 | | 44:f4:77:69:4d:41 | | 1701
- 442 | sw2-gamestudio | rs1.north | ge-0/0/45 | 151.216.183.230 | 27 | 151.216.183.225 | 64 | 2a02:ed02:1837::230 | 2a02:ed02:1837::1 | 666 | | 44:f4:77:69:5d:41 | | 229
- 435 | sw1-south | rs1.south | ge-0/0/45 | 151.216.183.98 | 27 | 151.216.183.97 | 64 | 2a02:ed02:1836::98 | 2a02:ed02:1836::1 | 666 | | 44:f4:77:69:49:81 | | 234
- 434 | sw8-creativia | rs1.distro6 | ge-0/0/25 | 151.216.181.155 | 26 | 151.216.181.129 | 64 | 2a02:ed02:181c::155 | 2a02:ed02:181c::1 | 666 | | 44:f4:77:69:1a:c1 | | 2008
- 420 | e83-1 | rs1.distro7 | ge-0/0/20 | 151.216.181.214 | 26 | 151.216.181.193 | 64 | 2a02:ed02:181d::214 | 2a02:ed02:181d::1 | 666 | | 44:f4:77:69:53:c1 | | 1831
- 419 | e81-2 | rs1.distro7 | ge-0/0/19 | 151.216.181.213 | 26 | 151.216.181.193 | 64 | 2a02:ed02:181d::213 | 2a02:ed02:181d::1 | 666 | | 44:f4:77:69:4b:81 | | 1812
- 418 | e81-1 | rs1.distro7 | ge-0/0/18 | 151.216.181.212 | 26 | 151.216.181.193 | 64 | 2a02:ed02:181d::212 | 2a02:ed02:181d::1 | 666 | | 44:f4:77:68:eb:c1 | | 1811
- 417 | e79-4 | rs1.distro6 | ge-0/0/17 | 151.216.181.147 | 26 | 151.216.181.129 | 64 | 2a02:ed02:181c::147 | 2a02:ed02:181c::1 | 666 | | 44:f4:77:69:02:c1 | | 1794
-```
-
-
-**Connect to DB from CLI**
-```
-j@lappie:~/git/tgmanage$ psql -U bootstrap -d bootstrap -W
-Password for user bootstrap:
-psql (9.3.5)
-Type "help" for help.
-
-bootstrap=>
-```
diff --git a/fap/dhcpd/DHCP_protocol_breakdown.txt b/fap/dhcpd/DHCP_protocol_breakdown.txt
deleted file mode 100755
index 5af2bf2..0000000
--- a/fap/dhcpd/DHCP_protocol_breakdown.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-Length of DHCP fields in octets, and their placement in packet.
-Ref: http://4.bp.blogspot.com/-IyYoFjAC4l8/UXuo16a3sII/AAAAAAAAAXQ/b6BojbYXoXg/s1600/DHCPTitle.JPG
-0 OP - 1
-1 HTYPE - 1
-2 HLEN - 1
-3 HOPS - 1
-4 XID - 4
-5 SECS - 2
-6 FLAGS - 2
-7 CIADDR - 4
-8 YIADDR - 4
-9 SIADDR - 4
-10 GIADDR - 4
-11 CHADDR - 6
-12 MAGIC COOKIE - 10
-13 PADDING - 192 octets of 0's
-14 MAGIC COOKIE - 4
-15 OPTIONS - variable length
diff --git a/fap/dhcpd/module_craft_option.py b/fap/dhcpd/module_craft_option.py
deleted file mode 100755
index 35e7328..0000000
--- a/fap/dhcpd/module_craft_option.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-'''
- Created by Jonas 'j' Lindstad for The Gathering 2015
- License: GPLv3
-
- Class used to craft byte hex encoded DHCP options
-
- NB: No direct support for suboptions. Should be possible to craft suboptions as
- options, and inject them with craft_option(<option>).raw_hes(<conconcatenated options>)
-
- Usage examples:
- craft_option.debug = True
- print(craft_option(1).string('vg.no'))
- print(craft_option(2).bytes(b'abcd'))
- print(craft_option(3).bytes(socket.inet_aton('192.168.0.55')))
- print(craft_option(4).bytes(b'\xde\xad\xbe\xef\xfe\xed'))
- print(craft_option(5).raw_hex(b'\x72\x78'))
- print(craft_option(6).ip('255.255.128.0'))
-'''
-
-from binascii import hexlify, unhexlify
-
-class craft_option(object):
- # content = b'' # content will be stored as hex values like hex(10) + hex(255) = 0aff
- debug = False
- def __init__(self, code):
- self.code = self.__int_to_pad_byte(code)
-
- # Works as intended
- # internal function. Converts int(3) to str('03'), int('11') to str('0b'), int(255) to str('ff')
- def __int_to_pad_byte(self, integer):
- return hex(integer).split('x')[1].rjust(2, '0').encode()
-
- # Works as intended
- def string(self, string):
- self.method = 'string'
- self.content = hexlify(string.encode())
- return self.process()
-
- # Works as intended
- def bytes(self, bytes):
- self.method = 'bytes'
- self.content = hexlify(bytes)
- return self.process()
-
- # Works as intended
- # str('10.20.30.40') to b'\x10\x20\x30\x40'
- def ip(self, ip):
- self.method = 'ip'
- self.content = ''.join([hex(int(i))[2:].rjust(2, '0') for i in ip.split('.')]).encode()
- return self.process()
-
- # Works as intended
- # string like '\x72\x78' for 'rx'
- def raw_hex(self, raw_hex):
- self.method = 'raw_hex'
- self.content = hexlify(raw_hex)
- return self.process()
-
-
-
- # TODO Does not work as intended
- # int(666) to b'\x02\x9A'
- def integer(self, integer):
- self.method = 'integer'
- self.content = ''.join([hex(int(i))[2:].rjust(2, '0') for i in ip.split('.')])
- return self.process()
-
- def process(self):
- length = self.__int_to_pad_byte(len(unhexlify(self.content)))
- if self.debug is True:
- print('----------')
- print(self.method + '():')
- print(self.code + length)
- print(b'content: ' + self.content)
- print(unhexlify(self.content))
- return unhexlify(self.code + length + self.content)
diff --git a/fap/dhcpd/module_lease.py b/fap/dhcpd/module_lease.py
deleted file mode 100755
index 0473579..0000000
--- a/fap/dhcpd/module_lease.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-'''
- Created by Jonas 'j' Lindstad for The Gathering 2015
- License: GPLv3
-
- Class used to fetch data from the Postgres DB
-
- Usage examples:
- lease.debug = True
- x = lease({'distro_name': 'distro-test', 'distro_phy_port': 'ge-0/0/6'}).get_dict()
- print('key lookup - hostname: %s' % x['hostname'])
-'''
-
-import psycopg2
-import psycopg2.extras
-
-# settings
-settings = dict(
- db = dict(
- user = 'fap',
- password = '<sensored>',
- dbname = 'fap',
- host = 'localhost'
- )
-)
-
-# connect to Postgres DB
-connect_params = ("dbname='%s' user='%s' host='%s' password='%s'" % (settings['db']['dbname'], settings['db']['user'], settings['db']['host'], settings['db']['password']))
-conn = psycopg2.connect(connect_params)
-cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
-
-class lease(object):
- debug = False
-
- def __init__(self, identifiers):
- if len(identifiers) > 0: # 1 or more identifiers - we're good to go
-
- # build query string
- where_pieces = []
- for x in identifiers.items():
- where_pieces.append(str(x[0]) + " = '" + str(x[1]) + "'")
- where = ' AND '.join(where_pieces)
- select = "SELECT * FROM switches WHERE " + where + " LIMIT 1"
-
- if self.debug is True:
- print('Executing query: ' + select)
-
- cur.execute(select)
-
- rows = cur.fetchall()
- if len(rows) is 1:
- if self.debug is True:
- print('returned from DB:')
- for key, value in rows[0].items():
- print('%s: %s' % (key, value))
-
- self.row = rows[0]
- else:
- self.row = False
- else:
- print('Missing identifier parameter')
- exit()
-
- def get_ip(self):
- if self.row is not False:
- return self.row['ip']
- else:
- print('identifiers (%s) not found' % self.row)
- return False
-
- def get_config(self):
- if self.row is not False:
- return self.row['config']
- else:
- print('identifiers (%s) not found' % self.row)
- return False
-
- def get_dict(self):
- if self.row is not False:
- return self.row
- else:
- print('identifiers (%s) not found' % self.row)
- return False
-
-
-#
-# TESTING - Bruker ID fra DB-en som identifier, og kjører en query per lease.get_x()
-#
-class lease2(object):
- debug = False
- hostname = False
- identifiers = False
-
- # identifiers = dict of field/values
- def __init__(self, identifiers):
- cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
-
- if len(identifiers) > 0: # 1 or more identifiers - we're good to go
- self.identifiers = identifiers # Used to debug if no match for the identifiers is given
-
- # build query string
- where_pieces = []
- for identifier in identifiers.items():
- where_pieces.append(str(identifier[0]) + " = '" + str(identifier[1]) + "'")
- where = ' AND '.join(where_pieces)
- select = "SELECT hostname FROM switches WHERE " + where + " LIMIT 1"
-
- if self.debug is True:
- print('Executing query: ' + select)
-
- cur.execute(select)
- rows = cur.fetchall()
- cur.close()
- if len(rows) is 1:
- if self.debug is True:
- print('returned from DB:')
- print(rows[0][0])
- self.hostname = rows[0][0]
- else:
- self.hostname = False
- else:
- print('Missing identifier parameter')
- exit()
-
- # Used to fetch fields from DB
- def get(self, field):
- if self.hostname is not False:
- cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
-
- query = "SELECT %s FROM switches WHERE hostname = '%s' LIMIT 1" % (field, self.hostname)
- if self.debug is True:
- print('Query: %s' % query)
-
- try:
- cur.execute(query)
- rows = cur.fetchall()
-
- if len(rows) is 1:
- if self.debug is True:
- print('returned from DB:')
- print(rows[0][0])
- return rows[0][0]
- else:
- if self.debug is True:
- print('No data found - field: %s' % field)
- return False
- except psycopg2.ProgrammingError:
- print('Field (%s) not found' % field)
- conn.rollback() # Prevents DB from locking up the next queries - http://initd.org/psycopg/docs/connection.html#connection.rollback
- return False
- else:
- print('identifiers (%s) not found' % self.identifiers)
- return False
-
- # Used to set fields in DB
- def set(self, field, value):
- if self.hostname is not False:
- cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
- query = "UPDATE switches SET %s = '%s' WHERE hostname = '%s'" % (field, value, self.hostname)
- if self.debug is True:
- print('Query: %s' % query)
- try:
- cur.execute(query)
- conn.commit()
- return True
- except psycopg2.ProgrammingError:
- print('Field (%s) not found' % field)
- conn.rollback()
- return False
- else:
- print('identifiers (%s) not found' % self.identifiers)
- return False
diff --git a/fap/dhcpd/server_dhcp.py b/fap/dhcpd/server_dhcp.py
deleted file mode 100755
index 592e1eb..0000000
--- a/fap/dhcpd/server_dhcp.py
+++ /dev/null
@@ -1,360 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-'''
-server_dhcp.py by Jonas "j" Lindstad for The Gathering tech:server
-
-Used to configure the Juniper EX2200 edge switches with Zero Touch Protocol
-License: GPLv2
-
-Based on the work of psychomario - https://github.com/psychomario
-'''
-
-
-'''
-
-TODO
-
- * try/catch around each incomming packet - prevents DHCP-server from crashing if it receives a malformed packet
-
-'''
-
-import socket, binascii, IN
-from module_craft_option import craft_option # Module that crafts DHCP options
-# from module_lease import lease # Module that fetches data from DB and provides data for the lease
-from module_lease import lease2 as lease # Module that fetches data from DB and provides data for the lease
-
-
-# Global options - not a pretty hack
-options_raw = {} # TODO - not a nice way to do things
-option_82_1 = ''
-client = ''
-
-
-#############
-# FUNCTIONS #
-#############
-
-# Generator for each of the dhcp fields
-def split_packet(msg,slices):
- for x in slices:
- yield msg[:x]
- msg = msg[x:]
-
-# Splits a chunk of hex into a list of hex. (0123456789abcdef => ['01', '23', '45', '67', '89', 'ab', 'cd', 'ef'])
-def chunk_hex(hex):
- return [hex[i:i+2] for i in range(0, len(hex), 2)]
-
-# Convert hex IP to string with formated decimal IP. (0a0000ff => 10.0.0.255)
-def hex_ip_to_str(hex_ip):
- return '.'.join(str(y) for y in map(lambda x: int(x, 16), chunk_hex(hex_ip))) # cast int to str for join
-
-# formats a MAC address in the format "b827eb9a520f" to "b8:27:eb:9a:52:0f"
-def format_hex_mac(hex_mac):
- return ':'.join(str(x) for x in chunk_hex(hex_mac))
-
-# Formats a 6 byte MAC to a readable string (b'5e\x21\x00r3' => '35:65:21:00:72:33')
-def six_byte_mac_to_str(mac):
- return ':'.join('%02x' % byte for byte in mac)
-
-# b'b827eb9a520f' => 'b8:27:eb:9a:52:0f'
-def prettyprint_hex_as_str(hex):
- return ':'.join('%02x' % byte for byte in binascii.unhexlify(hex))
-
-# CIDR notation to subnet string ('25' => '255.255.255.128')
-def cidr_to_subnet(cidr):
- mask = [0, 0, 0, 0]
- for i in range(int(cidr)):
- mask[i//8] = mask[i//8] + (1 << (7 - i % 8))
- return '.'.join(str(x) for x in mask)
-
-# Parses DHCP options - raw = hex options
-def parse_options(raw):
- print('[%s] --> processing DHCP options' % client)
- chunked = chunk_hex(raw)
- chunked_length = len(chunked)
- pointer = 0 # counter - next option start
- options = {} # options dataset
-
- global options_raw
- options_raw = {} # incomming request's options
- special_options = [53, 82]
-
- while True: # Loop over the DHCP options
- option = int(chunked[pointer], 16) # option ID (0 => 255)
- code = int(chunked[pointer], 16) # option code (0 => 255) # New int for options' ID with correct name. Replaces $option
-
- length = int(chunked[pointer+1], 16) # option length
- option_payload = raw[((pointer+2)*2):((pointer+length+2)*2)] # Contains the payload of the option - without option ID and length
- options_raw[code] = option_payload # copying incomming request's options, directly usable in outgoing replies
-
- asciivalue = binascii.unhexlify(option_payload) # should not contain unreadable characters
-
- if option in special_options:
- if option is 82:
- option82_raw = option_payload
- options[option] = parse_suboptions(option, option_payload)
- elif option is 53:
- options[option] = option_payload
- # options[option] = 1 # Not adding DHCP DISCOVER to the options list, becouse it will not be used further on
- if int(chunked[pointer+2], 16) is 1:
- print('[%s] --> option: %s: %s' % (client, option, 'DHCP Discover (will not be used in reply)'))
- else:
- print('[%s] --> option: %s: %s' % (client, option, asciivalue))
-
- else:
- options[option] = asciivalue
- # TODO: Formating.... Also crap code
- try:
- if len(asciivalue) > 30:
- print('[%s] --> option: %s: %s' % (client, option, asciivalue[:26] + ' [...]'))
- else:
- print('[%s] --> option: %s: %s' % (client, option, asciivalue))
- except Exception:
- if len(asciivalue) > 30:
- print('[%s] --> option: %s: %s' % (client, option, prettyprint_hex_as_str(option_payload)[:26] + ' [...]'))
- else:
- print('[%s] --> option: %s: %s' % (client, option, prettyprint_hex_as_str(option_payload)))
- pass
-
- pointer = pointer + length + 2 # place pointer at the next options' option ID/code field
-
- if int(chunked[pointer], 16) is 255: # end of DHCP options - should allways last field
- print('[%s] --> Finished processing options' % client)
- break
- return options
-
-# Parses suboptions
-def parse_suboptions(option, raw):
- print('[%s] --> processing suboption hook for option %s' % (client, option))
- chunked = chunk_hex(raw)
- chunked_length = len(chunked)
- pointer = 0 # counter - next option start
- dataset = {}
-
- if option is 82: # Option 82 - custom shit: Setting global variable to list
- global option_82_1
-
- while True:
- length = int(chunked[pointer+1], 16) # option length in bytes
- value = raw[4:(length*2)+(4)]
-
- if option is 82 and int(chunked[0], 16) is 1: # Option 82 - custom shit: Putting data in list
- option_82_1 = binascii.unhexlify(value).decode()
-
- print('[%s] --> suboption %s found - value: "%s"' % (client, int(chunked[0], 16), binascii.unhexlify(value).decode())) # will fail on non-ascii characters
-
- dataset[int(chunked[0], 16)] = value
- pointer = pointer + length + 2 # place pointer at the next options' option ID/code field
- if pointer not in chunked: # end of DHCP options - allways last field
- print('[%s] --> Finished processing suboption %s' % (client, option))
- break
- return dataset
-
-# Parses and handles DHCP DISCOVER or DHCP REQUEST
-def reqparse(message):
- data=None
- dhcpfields=[1,1,1,1,4,2,2,4,4,4,4,6,10,192,4,message.rfind(b'\xff'),1]
- hexmessage=binascii.hexlify(message)
- messagesplit=[binascii.hexlify(x) for x in split_packet(message,dhcpfields)]
-
- global client
- client = prettyprint_hex_as_str(messagesplit[11])
-
- if messagesplit[11][0:6] != b'44f477':
- print('[%s] Client not Juniper - exiting (GIADDR: %s)' % (client, hex_ip_to_str(messagesplit[10])))
- return False
-
- print('[%s] Parsing DHCP packet from client' % client)
-
- #
- # Logical checks to decide to whether respond or reject
- #
- if int(hex_ip_to_str(messagesplit[10]).replace('.', '')) is 0: # DHCP request has been forwarded by DHCP relay - A bit haxxy..
- print('[%s] Rejecting to process DHCP packet - not forwarded by DHCP relay' % client)
- return False
-
-
- # Process DHCP options
- options = parse_options(messagesplit[15])
-
- # Option 82 is set in the packet
- if 82 not in options:
- print('[%s] Rejecting to process DHCP packet - DHCP option 82 not set' % client)
- return False
-
- # 1 = DHCP Discover message (DHCPDiscover).
- # 2 = DHCP Offer message (DHCPOffer).
- # 3 = DHCP Request message (DHCPRequest).
- # 4 = DHCP Decline message (DHCPDecline).
- # 5 = DHCP Acknowledgment message (DHCPAck).
- # 6 = DHCP Negative Acknowledgment message (DHCPNak).
- # 7 = DHCP Release message (DHCPRelease).
- # 8 = DHCP Informational message (DHCPInform).
-
- # Check DHCP request type
- if options[53] == b'01':
- mode = 'dhcp_discover'
- print('[%s] --> DHCP packet type: DHCP DISCOVER' % client)
- elif options[53] == b'03':
- mode = 'dhcp_request'
- print('[%s] --> DHCP packet type: DHCP REQUEST' % client)
- elif options[53] == b'04':
- print('[%s] --> DHCP packet type: DHCP DECLINE - Not implemented' % client)
- return False
- elif options[53] == b'05':
- print('[%s] --> DHCP packet type: DHCP ACK - Not implemented' % client)
- return False
- elif options[53] == b'06':
- print('[%s] --> DHCP packet type: DHCP NEGATIVE ACK - Not implemented' % client)
- return False
- elif options[53] == b'07':
- print('[%s] --> DHCP packet type: DHCP RELEASE - Not implemented' % client)
- return False
- elif options[53] == b'08':
- print('[%s] --> DHCP packet type: DHCP INFORM - Not implemented' % client)
- return False
- else:
- print('[%s] Rejecting to continue process DHCP packet - option 53 missing' % client) # Small sanity check
- return False
-
-
- #
- # Packet passes our requirements
- #
- print('[%s] --> DHCP packet contains option 82 - continues to process' % client)
- print('[%s] --> DHCP packet forwarded by relay %s' % (client, hex_ip_to_str(messagesplit[10])))
- print('[%s] --> DHCP XID/Transaction ID: %s' % (client, prettyprint_hex_as_str(messagesplit[4])))
-
- # Handle DB request - do DB lookup based on option 82
- print('[%s] --> Looking up in the DB' % (client))
-
- option_82_1_pieces = option_82_1.split(':')
-
- if len(option_82_1_pieces) == 3:
- (distro, phy, vlan) = option_82_1.split(':')
- print('[%s] --> Query details: distro_name:%s, distro_phy_port:%s' % (client, distro, phy.split('.')[0]))
-
- lease_identifiers = {'distro_name': distro, 'distro_phy_port': phy.split('.')[0]}
- if lease(lease_identifiers).get('hostname') is not False:
- l={
- 'hostname': lease(lease_identifiers).get('hostname'),
- 'mgmt_v4_addr': lease(lease_identifiers).get('mgmt_v4_addr'),
- 'mgmt_v4_gw': lease(lease_identifiers).get('mgmt_v4_gw'),
- 'mgmt_v4_cidr': lease(lease_identifiers).get('mgmt_v4_cidr')
- }
-
- # lease_details = lease({'distro_name': distro, 'distro_phy_port': phy[:-2]}).get_dict()
- print('[%s] --> Data found, switch exists in DB - ready to craft response' % client)
- else:
- print('[%s] --> Data not found, switch does not exists in DB' % client)
- return False
- elif len(option_82_1_pieces) > 0:
- print('[%s] --> Option 82 does not contained required syntax (<distro>:<phy_port>:<vlan>)' % client)
- print('[%s] --> Option 82: %s' % (client, option_82_1))
- print('[%s] --> Ending request' % client)
- return False
- else:
- print('[%s] Rejecting to continue to process DHCP packet - option 82.1 is empty' % client)
-
- if mode == 'dhcp_discover':
- print('[%s] --> Crafting DHCP OFFER response' % client)
-
- if mode == 'dhcp_request':
- print('[%s] --> Crafting DHCP ACK response' % client)
-
- print('[%s] --> XID/Transaction ID: %s' % (client, prettyprint_hex_as_str(messagesplit[4])))
- print('[%s] --> Client IP: %s' % (client, l['mgmt_v4_addr']))
- print('[%s] --> DHCP forwarder IP: %s' % (client, l['mgmt_v4_gw']))
- print('[%s] --> Client MAC: %s' % (client, client))
-
- data = b'\x02' # Message type - boot reply
- data += b'\x01' # Hardware type - ethernet
- data += b'\x06' # Hardware address length - 6 octets for MAC
- data += b'\x01' # Hops
- data += binascii.unhexlify(messagesplit[4]) # XID / Transaction ID
- data += b'\x00\x00' # seconds elapsed - 1 second
- data += b'\x80\x00' # BOOTP flags - broadcast (unicast: 0x0000)
- data += b'\x00'*4 # Client IP address
- data += socket.inet_aton(l['mgmt_v4_addr']) # New IP to client
- data += socket.inet_aton(dhcp_server_address) # Next server IP address
- data += socket.inet_aton(l['mgmt_v4_gw']) # Relay agent IP - DHCP forwarder
- data += binascii.unhexlify(messagesplit[11]) # Client MAC
- data += b'\x00'*202 # Client hardware address padding (10) + Server hostname (64) + Boot file name (128)
- data += b'\x63\x82\x53\x63' # Magic cookie
-
- #
- # Craft DHCP options
- #
- print('[%s] --> Completed DHCP header structure, building DHCP options' % client)
-
- if mode == 'dhcp_discover':
- print('[%s] --> Option 53 (DHCP OFFER): 2' % client)
- data += craft_option(53).raw_hex(b'\x02') # Option 53 - DHCP OFFER
-
- if mode == 'dhcp_request':
- print('[%s] --> Option 53 (DHCP ACK): 5' % client)
- data += craft_option(53).raw_hex(b'\x05') # Option 53 - DHCP ACK
-
- data += craft_option(54).bytes(socket.inet_aton(dhcp_server_address)) # Option 54 - DHCP server identifier
- print('[%s] --> Option 54 (DHCP server identifier): %s' % (client, dhcp_server_address))
-
- data += craft_option(51).raw_hex(b'\x00\x00\xa8\xc0') # Option 51 - Lease time left padded with "0"
- print('[%s] --> Option 51 (Lease time): %s' % (client, '43200 (12 hours)'))
-
- data += craft_option(1).ip(cidr_to_subnet(l['mgmt_v4_cidr'])) # Option 1 - Subnet mask
- print('[%s] --> Option 1 (subnet mask): %s' % (client, cidr_to_subnet(l['mgmt_v4_cidr'])))
-
- data += craft_option(3).ip(l['mgmt_v4_gw']) # Option 3 - Default gateway (set to DHCP forwarders IP)
- print('[%s] --> Option 3 (default gateway): %s' % (client, l['mgmt_v4_gw']))
-
- data += craft_option(150).bytes(socket.inet_aton(dhcp_server_address)) # Option 150 - TFTP Server. Used as target for the Zero Touch Protocol. Not necessarily TFTP protocol used.
- print('[%s] --> Option 150 (Cisco proprietary TFTP server(s)): %s' % (client, dhcp_server_address))
-
- # http://www.juniper.net/documentation/en_US/junos13.2/topics/concept/software-image-and-configuration-automatic-provisioning-understanding.html
- data += craft_option(43).bytes(craft_option(0).string(target_junos_file) + craft_option(1).string('/tg-edge/' + l['hostname']) + craft_option(3).string('http')) # Option 43 - ZTP
- print('[%s] --> Option 43 (Vendor-specific option):' % client)
- print('[%s] --> Suboption 0: %s' % (client, target_junos_file))
- print('[%s] --> Suboption 1: %s' % (client, '/tg-edge/' + l['hostname']))
- print('[%s] --> Suboption 3: %s' % (client, 'http'))
-
- data += b'\xff'
-
- lease(lease_identifiers).set('current_mac', client) # updates MAC in DB
-
- return data
-
-if __name__ == "__main__":
- interface = b'eth0'
- dhcp_server_address = '185.12.59.11'
- target_junos_file = '/files/jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz'
-
- # Setting up the server, and how it will communicate
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # IPv4 UDP socket
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
- s.setsockopt(socket.SOL_SOCKET, 25, interface)
- s.bind(('', 67))
-
- # Starting the whole loop
- print('Starting main loop')
- while True: #main loop
- try:
- message, addressf = s.recvfrom(8192)
- # print(message)
- if message.startswith(b'\x01'): # UDP payload is DHCP request (discover, request, release)
- if addressf[0] == '0.0.0.0':
- # print('[%s] DHCP broadcast - unsupported' % client)
- reply_to = '<broadcast>'
- else:
- print('[%s] DHCP unicast - DHCP forwarding' % client)
- reply_to = addressf[0] # senders (DHCP forwarders) IP
- # print(addressf[0])
- # reply_to = '10.0.0.1'
- data=reqparse(message) # Parse the DHCP request
- if data:
- print('[%s] --> replying to %s' % (client, reply_to))
- s.sendto(data, (reply_to, 67)) # Sends reply
- print('')
- except KeyboardInterrupt:
- exit()
diff --git a/fap/dhcpd/terminal.log b/fap/dhcpd/terminal.log
deleted file mode 100755
index e865bd4..0000000
--- a/fap/dhcpd/terminal.log
+++ /dev/null
@@ -1,146 +0,0 @@
-j@lappie:~/git/tgmanage$ sudo python3 fap/dhcpd/server_dhcp.py
-Starting main loop
-[] DHCP unicast - DHCP forwarding
-[40:b4:f0:cc:76:01] Parsing DHCP packet from client
-[40:b4:f0:cc:76:01] --> processing DHCP options
-[40:b4:f0:cc:76:01] --> option: 53: DHCP Discover (will not be used in reply)
-[40:b4:f0:cc:76:01] --> option: 12: b'GP0212466317'
-[40:b4:f0:cc:76:01] --> option: 60: 4a:75:6e:69:70:65:72:2d:65 [...]
-[40:b4:f0:cc:76:01] --> processing suboption hook for option 82
-[40:b4:f0:cc:76:01] --> suboption 1 found - value: "distro0gw:ge-0/0/0.0:mgmt"
-[40:b4:f0:cc:76:01] --> Finished processing suboption 82
-[40:b4:f0:cc:76:01] --> Finished processing options
-[40:b4:f0:cc:76:01] --> DHCP packet type: DHCP DISCOVER
-[40:b4:f0:cc:76:01] --> DHCP packet contains option 82 - continues to process
-[40:b4:f0:cc:76:01] --> DHCP packet forwarded by relay 10.0.200.1
-[40:b4:f0:cc:76:01] --> DHCP XID/Transaction ID: 75:45:e1:46
-[40:b4:f0:cc:76:01] --> Looking up in the DB
-[40:b4:f0:cc:76:01] --> Query details: distro_name:distro0gw, distro_phy_port:ge-0/0/0
-[40:b4:f0:cc:76:01] --> Data found, switch exists in DB - ready to craft response
-[40:b4:f0:cc:76:01] --> Crafting DHCP OFFER response
-[40:b4:f0:cc:76:01] --> XID/Transaction ID: 75:45:e1:46
-[40:b4:f0:cc:76:01] --> Client IP: 10.0.200.101
-[40:b4:f0:cc:76:01] --> DHCP forwarder IP: 10.0.200.1
-[40:b4:f0:cc:76:01] --> Client MAC: 40:b4:f0:cc:76:01
-[40:b4:f0:cc:76:01] --> Completed DHCP header structure, building DHCP options
-[40:b4:f0:cc:76:01] --> Option 53 (DHCP OFFER): 2
-[40:b4:f0:cc:76:01] --> Option 54 (DHCP server identifier): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 51 (Lease time): 43200 (12 hours)
-[40:b4:f0:cc:76:01] --> Option 1 (subnet mask): 255.255.255.0
-[40:b4:f0:cc:76:01] --> Option 3 (default gateway): 10.0.200.1
-[40:b4:f0:cc:76:01] --> Option 150 (Cisco proprietary TFTP server(s)): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 43 (Vendor-specific option):
-[40:b4:f0:cc:76:01] --> Suboption 0: /files/jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
-[40:b4:f0:cc:76:01] --> Suboption 1: /tg-edge/e-00-1
-[40:b4:f0:cc:76:01] --> Suboption 3: http
-[40:b4:f0:cc:76:01] --> replying to 10.0.100.1
-
-[40:b4:f0:cc:76:01] DHCP unicast - DHCP forwarding
-[40:b4:f0:cc:76:01] Parsing DHCP packet from client
-[40:b4:f0:cc:76:01] --> processing DHCP options
-[40:b4:f0:cc:76:01] --> option: 54: b'\n\x00d\x02'
-[40:b4:f0:cc:76:01] --> option: 55: b'\x033\x01\x0f\x06BC+\x96\x0c\x07*'
-[40:b4:f0:cc:76:01] --> option: 50: b'\n\x00\xc8e'
-[40:b4:f0:cc:76:01] --> option: 53: b'\x03'
-[40:b4:f0:cc:76:01] --> option: 12: b'GP0212466317'
-[40:b4:f0:cc:76:01] --> option: 60: 4a:75:6e:69:70:65:72:2d:65 [...]
-[40:b4:f0:cc:76:01] --> processing suboption hook for option 82
-[40:b4:f0:cc:76:01] --> suboption 1 found - value: "distro0gw:ge-0/0/0.0:mgmt"
-[40:b4:f0:cc:76:01] --> Finished processing suboption 82
-[40:b4:f0:cc:76:01] --> Finished processing options
-[40:b4:f0:cc:76:01] --> DHCP packet type: DHCP REQUEST
-[40:b4:f0:cc:76:01] --> DHCP packet contains option 82 - continues to process
-[40:b4:f0:cc:76:01] --> DHCP packet forwarded by relay 10.0.200.1
-[40:b4:f0:cc:76:01] --> DHCP XID/Transaction ID: 51:5f:00:7c
-[40:b4:f0:cc:76:01] --> Looking up in the DB
-[40:b4:f0:cc:76:01] --> Query details: distro_name:distro0gw, distro_phy_port:ge-0/0/0
-[40:b4:f0:cc:76:01] --> Data found, switch exists in DB - ready to craft response
-[40:b4:f0:cc:76:01] --> Crafting DHCP ACK response
-[40:b4:f0:cc:76:01] --> XID/Transaction ID: 51:5f:00:7c
-[40:b4:f0:cc:76:01] --> Client IP: 10.0.200.101
-[40:b4:f0:cc:76:01] --> DHCP forwarder IP: 10.0.200.1
-[40:b4:f0:cc:76:01] --> Client MAC: 40:b4:f0:cc:76:01
-[40:b4:f0:cc:76:01] --> Completed DHCP header structure, building DHCP options
-[40:b4:f0:cc:76:01] --> Option 53 (DHCP ACK): 5
-[40:b4:f0:cc:76:01] --> Option 54 (DHCP server identifier): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 51 (Lease time): 43200 (12 hours)
-[40:b4:f0:cc:76:01] --> Option 1 (subnet mask): 255.255.255.0
-[40:b4:f0:cc:76:01] --> Option 3 (default gateway): 10.0.200.1
-[40:b4:f0:cc:76:01] --> Option 150 (Cisco proprietary TFTP server(s)): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 43 (Vendor-specific option):
-[40:b4:f0:cc:76:01] --> Suboption 0: /files/jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
-[40:b4:f0:cc:76:01] --> Suboption 1: /tg-edge/e-00-1
-[40:b4:f0:cc:76:01] --> Suboption 3: http
-[40:b4:f0:cc:76:01] --> replying to 10.0.100.1
-
-[40:b4:f0:cc:76:01] DHCP unicast - DHCP forwarding
-[40:b4:f0:cc:76:01] Parsing DHCP packet from client
-[40:b4:f0:cc:76:01] --> processing DHCP options
-[40:b4:f0:cc:76:01] --> option: 53: DHCP Discover (will not be used in reply)
-[40:b4:f0:cc:76:01] --> option: 60: 4a:75:6e:69:70:65:72:2d:65 [...]
-[40:b4:f0:cc:76:01] --> processing suboption hook for option 82
-[40:b4:f0:cc:76:01] --> suboption 1 found - value: "distro0gw:ge-0/0/0.0:mgmt"
-[40:b4:f0:cc:76:01] --> Finished processing suboption 82
-[40:b4:f0:cc:76:01] --> Finished processing options
-[40:b4:f0:cc:76:01] --> DHCP packet type: DHCP DISCOVER
-[40:b4:f0:cc:76:01] --> DHCP packet contains option 82 - continues to process
-[40:b4:f0:cc:76:01] --> DHCP packet forwarded by relay 10.0.200.1
-[40:b4:f0:cc:76:01] --> DHCP XID/Transaction ID: 64:3c:98:69
-[40:b4:f0:cc:76:01] --> Looking up in the DB
-[40:b4:f0:cc:76:01] --> Query details: distro_name:distro0gw, distro_phy_port:ge-0/0/0
-[40:b4:f0:cc:76:01] --> Data found, switch exists in DB - ready to craft response
-[40:b4:f0:cc:76:01] --> Crafting DHCP OFFER response
-[40:b4:f0:cc:76:01] --> XID/Transaction ID: 64:3c:98:69
-[40:b4:f0:cc:76:01] --> Client IP: 10.0.200.101
-[40:b4:f0:cc:76:01] --> DHCP forwarder IP: 10.0.200.1
-[40:b4:f0:cc:76:01] --> Client MAC: 40:b4:f0:cc:76:01
-[40:b4:f0:cc:76:01] --> Completed DHCP header structure, building DHCP options
-[40:b4:f0:cc:76:01] --> Option 53 (DHCP OFFER): 2
-[40:b4:f0:cc:76:01] --> Option 54 (DHCP server identifier): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 51 (Lease time): 43200 (12 hours)
-[40:b4:f0:cc:76:01] --> Option 1 (subnet mask): 255.255.255.0
-[40:b4:f0:cc:76:01] --> Option 3 (default gateway): 10.0.200.1
-[40:b4:f0:cc:76:01] --> Option 150 (Cisco proprietary TFTP server(s)): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 43 (Vendor-specific option):
-[40:b4:f0:cc:76:01] --> Suboption 0: /files/jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
-[40:b4:f0:cc:76:01] --> Suboption 1: /tg-edge/e-00-1
-[40:b4:f0:cc:76:01] --> Suboption 3: http
-[40:b4:f0:cc:76:01] --> replying to 10.0.100.1
-
-[40:b4:f0:cc:76:01] DHCP unicast - DHCP forwarding
-[40:b4:f0:cc:76:01] Parsing DHCP packet from client
-[40:b4:f0:cc:76:01] --> processing DHCP options
-[40:b4:f0:cc:76:01] --> option: 54: b'\n\x00d\x02'
-[40:b4:f0:cc:76:01] --> option: 55: b'\x033\x01\x0f\x06BC+\x96\x0c\x07*'
-[40:b4:f0:cc:76:01] --> option: 50: b'\n\x00\xc8e'
-[40:b4:f0:cc:76:01] --> option: 53: b'\x03'
-[40:b4:f0:cc:76:01] --> option: 60: 4a:75:6e:69:70:65:72:2d:65 [...]
-[40:b4:f0:cc:76:01] --> processing suboption hook for option 82
-[40:b4:f0:cc:76:01] --> suboption 1 found - value: "distro0gw:ge-0/0/0.0:mgmt"
-[40:b4:f0:cc:76:01] --> Finished processing suboption 82
-[40:b4:f0:cc:76:01] --> Finished processing options
-[40:b4:f0:cc:76:01] --> DHCP packet type: DHCP REQUEST
-[40:b4:f0:cc:76:01] --> DHCP packet contains option 82 - continues to process
-[40:b4:f0:cc:76:01] --> DHCP packet forwarded by relay 10.0.200.1
-[40:b4:f0:cc:76:01] --> DHCP XID/Transaction ID: 66:33:48:73
-[40:b4:f0:cc:76:01] --> Looking up in the DB
-[40:b4:f0:cc:76:01] --> Query details: distro_name:distro0gw, distro_phy_port:ge-0/0/0
-[40:b4:f0:cc:76:01] --> Data found, switch exists in DB - ready to craft response
-[40:b4:f0:cc:76:01] --> Crafting DHCP ACK response
-[40:b4:f0:cc:76:01] --> XID/Transaction ID: 66:33:48:73
-[40:b4:f0:cc:76:01] --> Client IP: 10.0.200.101
-[40:b4:f0:cc:76:01] --> DHCP forwarder IP: 10.0.200.1
-[40:b4:f0:cc:76:01] --> Client MAC: 40:b4:f0:cc:76:01
-[40:b4:f0:cc:76:01] --> Completed DHCP header structure, building DHCP options
-[40:b4:f0:cc:76:01] --> Option 53 (DHCP ACK): 5
-[40:b4:f0:cc:76:01] --> Option 54 (DHCP server identifier): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 51 (Lease time): 43200 (12 hours)
-[40:b4:f0:cc:76:01] --> Option 1 (subnet mask): 255.255.255.0
-[40:b4:f0:cc:76:01] --> Option 3 (default gateway): 10.0.200.1
-[40:b4:f0:cc:76:01] --> Option 150 (Cisco proprietary TFTP server(s)): 10.0.100.2
-[40:b4:f0:cc:76:01] --> Option 43 (Vendor-specific option):
-[40:b4:f0:cc:76:01] --> Suboption 0: /files/jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
-[40:b4:f0:cc:76:01] --> Suboption 1: /tg-edge/e-00-1
-[40:b4:f0:cc:76:01] --> Suboption 3: http
-[40:b4:f0:cc:76:01] --> replying to 10.0.100.1
-
diff --git a/fap/httpd/# DEPRECATED/server_http.py b/fap/httpd/# DEPRECATED/server_http.py
deleted file mode 100755
index a9ae74c..0000000
--- a/fap/httpd/# DEPRECATED/server_http.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-from http.server import BaseHTTPRequestHandler, HTTPServer
-from string import Template
-import time
-import psycopg2
-import psycopg2.extras
-import sys
-import os
-
-def main():
- #
- # Settings
- #
- settings = {
- 'db': {
- 'user': 'bootstrap',
- 'password': 'asdf',
- 'dbname': 'bootstrap',
- 'host': 'localhost'
- },
- 'http': {
- 'host': '0.0.0.0',
- 'port': 80
- }
- }
-
- #
- # Connect to DB
- #
- try:
- connect_params = ("dbname='%s' user='%s' host='%s' password='%s'" % (settings['db']['dbname'], settings['db']['user'], settings['db']['host'], settings['db']['password']))
- conn = psycopg2.connect(connect_params)
- cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
- # cur.execute("""SELECT * from switches""")
- # rows = cur.fetchall()
- # print ("\nSwitches in DB during server_http.py startup:")
- # for row in rows:
- # print (" --> %s, connected to %s port %s" % (row['hostname'], row['distro_name'], row['distro_phy_port']))
-
- except (psycopg2.DatabaseError, psycopg2.OperationalError) as e:
- print ('Error: %s' % e)
- sys.exit(1)
-
- except:
- print(sys.exc_info()[0])
- sys.exit(1)
-
- def template_get(model):
- return open('fap/httpd/' + model + '.template').read()
-
- def template_parse(template_src, hostname):
- cur.execute("SELECT * FROM switches WHERE hostname = '%s'" % hostname)
- if(cur.rowcount == 1):
- row = cur.fetchall()[0]
- d={
- 'hostname': row['hostname'],
- 'distro_name': row['distro_name'],
- 'distro_phy_port': row['distro_phy_port'],
- 'mgmt_addr': row['mgmt_addr'],
- 'mgmt_cidr': row['mgmt_cidr'],
- 'mgmt_gw': row['mgmt_gw'],
- 'mgmt_vlan': row['mgmt_vlan'],
- 'traffic_vlan': row['traffic_vlan'],
- 'mgmt_v6_addr': row['mgmt_v6_addr'],
- 'mgmt_v6_cidr': row['mgmt_v6_cidr'],
- 'mgmt_v6_gw': row['mgmt_v6_gw']
- }
- cur.execute("UPDATE switches SET last_config_fetch = '%s' WHERE hostname = '%s'" % (str(time.time()).split('.')[0], hostname)) # updated DB with last config fetch
- conn.commit()
- return Template(template_src).safe_substitute(d)
- else:
- return False
-
- class httpd(BaseHTTPRequestHandler):
- def do_GET(self):
- print('[%s] [%s] Incoming HTTP GET URI:%s ' % (self.client_address[0], time.asctime(), self.path))
-
- # Client asks for the config file
- if '/tg-edge/' in self.path:
- hostname = self.path.split('/tg-edge/')[1]
- if len(hostname) > 0:
- print('[%s] --> Hostname "%s" accepted, fetching info from DB' % (self.client_address[0], hostname))
- template_parsed = template_parse(template_get('ex2200'), hostname)
- if template_parsed:
- print('[%s] --> Template successfully populated' % self.client_address[0])
- print('[%s] --> Sending response to client' % self.client_address[0])
- self.send_response(200)
- self.send_header("Content-type", "text/plain")
- self.end_headers()
- self.wfile.write(bytes(template_parsed, "utf-8"))
- print('[%s] --> Success - %s bytes sent to client' % (self.client_address[0], len(template_parsed)))
- else:
- print('[%s] --> Error - could not find hostname "%s" in DB' % (self.client_address[0], hostname))
- else:
- print('[%s] --> Rejected due to missing hostname' % self.client_address[0])
-
- # Client asks for a file download - most likely a JunOS file
- elif '/files/' in self.path:
- # It seems that "http.server" escapes nastiness from the URL - ("/files/../../../root_file" => "/files/root_file")
- requested_file = self.path.split('/files/')[1]
- files_dir = 'fap/httpd/files/'
- print('[%s] --> File request for "%s" in "%s"' % (self.client_address[0], requested_file, files_dir))
- if os.path.isfile(files_dir + requested_file):
- print('[%s] --> File found' % self.client_address[0])
- try:
- f = open(files_dir + requested_file)
- self.send_response(200)
- self.send_header('Content-type', 'application/x-gzip') # correct content type for tar.gz
- self.end_headers()
- print('[%s] --> File transfer started' % self.client_address[0])
- f = open(files_dir + requested_file, 'rb')
- self.wfile.write(f.read())
- f.close()
- print('[%s] --> File transfer completed' % self.client_address[0])
- return
- except IOError:
- self.send_error(404,'File Not Found: %s' % self.path)
- print('[%s] --> ERROR 404 - File not found' % self.client_address[0])
- pass
- except:
- print('[%s] --> Generic error during file reading' % self.client_address[0])
- pass
- else:
- print('[%s] --> File request rejected due to nonexisting file' % self.client_address[0])
- else:
- print('[%s] --> rejected due to bad URI' % self.client_address[0])
- # silence stderr from BaseHTTPRequestHandler
- # source: http://stackoverflow.com/questions/3389305/how-to-silent-quiet-httpserver-and-basichttprequesthandlers-stderr-output
- def log_message(self, format, *args):
- return
-
- httpd_instance = HTTPServer((settings['http']['host'], settings['http']['port']), httpd)
- print("\n[%s] Server Starts - %s:%s" % (time.asctime(), settings['http']['host'], settings['http']['port']))
-
- try:
- httpd_instance.serve_forever()
- except KeyboardInterrupt:
- pass
-
- httpd_instance.server_close()
- print("\n\n[%s] HTTP Server stopped\n" % time.asctime())
-
-if __name__ == "__main__":
- main()
diff --git a/fap/httpd/# DEPRECATED/terminal.log b/fap/httpd/# DEPRECATED/terminal.log
deleted file mode 100755
index bedb829..0000000
--- a/fap/httpd/# DEPRECATED/terminal.log
+++ /dev/null
@@ -1,14 +0,0 @@
-j@lappie:~/git/tgmanage$ sudo python3 fap/httpd/server_http.py
-
-[Thu Feb 19 23:15:45 2015] Server Starts - 0.0.0.0:80
-[10.0.200.101] [Fri Feb 20 00:18:25 2015] Incoming HTTP GET URI://tg-edge/e-00-1
-[10.0.200.101] --> Hostname "e-00-1" accepted, fetching info from DB
-[10.0.200.101] --> Template successfully populated
-[10.0.200.101] --> Sending response to client
-[10.0.200.101] --> Success - 1437 bytes sent to client
-[10.0.200.101] [Fri Feb 20 00:18:26 2015] Incoming HTTP GET URI://files/jinstall-ex-2200-12.3R6.6-domestic-signed.tgz
-[10.0.200.101] --> File request for "jinstall-ex-2200-12.3R6.6-domestic-signed.tgz" in "fap/httpd/files/"
-[10.0.200.101] --> File found
-[10.0.200.101] --> File transfer started
-[10.0.200.101] --> File transfer completed
-
diff --git a/fap/httpd/README.md b/fap/httpd/README.md
deleted file mode 100755
index 73c5634..0000000
--- a/fap/httpd/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# HTTPD
-
-Well, not working out quite as I've hoped (at least for now).
-
-Resorted to Apache2, PHP and Postgres for the HTTP. Apache starts at boot, so no action required to get the stack up and after installation.
-
-```
-j@lappie:~/git/tgmanage$ cat /etc/apache2/sites-enabled/000-default.conf
-<VirtualHost *:80>
- ServerAdmin webmaster@localhost
-
- DocumentRoot /home/j/git/tgmanage/fap/httpd/httpd_root/
-
- <Directory /home/j/git/tgmanage/fap/httpd/httpd_root>
- Options Indexes FollowSymLinks MultiViews
- AllowOverride All
- Order allow,deny
- allow from all
- </Directory>
-
- ErrorLog ${APACHE_LOG_DIR}/error.log
- LogLevel warn
-
- CustomLog ${APACHE_LOG_DIR}/access.log combined
-</VirtualHost>
-```
diff --git a/fap/httpd/files/.gitignore b/fap/httpd/files/.gitignore
deleted file mode 100755
index cec9082..0000000
--- a/fap/httpd/files/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-
-!.gitignore
diff --git a/fap/httpd/httpd_root/# create_queries - DEPRECATED/create_queries.php b/fap/httpd/httpd_root/# create_queries - DEPRECATED/create_queries.php
deleted file mode 100644
index 8d4bf26..0000000
--- a/fap/httpd/httpd_root/# create_queries - DEPRECATED/create_queries.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
- /*
- Used for generating SQL queries for FAP
- Jonas Lindstad for TG15
- GPL V2
- */
-
- chdir(__DIR__); # sets the executing directory to be the path of this script - necessary for CLI require() usage
- header("Content-Type: text/plain");
-
- require 'ipcalc_functions.php';
- /*
- Load data sources
- */
- $patchlist = file('patchlist.txt');
- $switches = file('switches.txt');
-
- $dataset = array();
-
- foreach($patchlist as $lines){
- $pieces = explode(' ', trim($lines));
- $dataset[$pieces[0]] = array(
- 'hostname' => $pieces[0],
- 'distro_name' => 'rs1.' . $pieces[1], # prefix with "rs." so we get "rs1.distro0" syntax
- 'distro_phy_port' => $pieces[2]
- );
- }
-
- /*
- Assign to logical and usable names in array
- */
- foreach($switches as $lines){
- $pieces = explode(' ', trim($lines));
- $dataset[$pieces[0]]['mgmt_v4_addr'] = explode('/', $pieces[3])[0];
- $dataset[$pieces[0]]['mgmt_v4_cidr'] = explode('/', $pieces[3])[1];
- $dataset[$pieces[0]]['mgmt_v4_gw'] = net_to_gw($pieces[3]);
- $dataset[$pieces[0]]['mgmt_v6_addr'] = explode('/', $pieces[4])[0];
- $dataset[$pieces[0]]['mgmt_v6_cidr'] = explode('/', $pieces[4])[1];
- $dataset[$pieces[0]]['mgmt_v6_gw'] = net_to_gw($pieces[4]);
- $dataset[$pieces[0]]['traffic_vlan'] = $pieces[5];
- $dataset[$pieces[0]]['mgmt_vlan'] = '666';
- }
-
- /*
- Prints the query rows
- */
- $sql_query = '';
- foreach($dataset as $k => $v){
- $columns = implode(', ', array_keys($v));
- $values = "'" . implode("', '", array_values($v)) . "'";
- $sql_query .= 'INSERT INTO switches (' . $columns . ') VALUES (' . $values . ');' . "\n";
- }
-
- echo $sql_query;
-?>
diff --git a/fap/httpd/httpd_root/# create_queries - DEPRECATED/ipcalc_functions.php b/fap/httpd/httpd_root/# create_queries - DEPRECATED/ipcalc_functions.php
deleted file mode 100644
index e848ef1..0000000
--- a/fap/httpd/httpd_root/# create_queries - DEPRECATED/ipcalc_functions.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
- /*
- Mainly copied from djamps's work - https://github.com/djamps/php-ipv6-calculator/blob/master/ipcalc.php
- Edited by Jonas Lindstad for The Gathering 2015
- Licensed under GPL
- */
-
-
-
- // Convert array of short unsigned integers to binary
- function _packBytes($array) {
- foreach ( $array as $byte ) {
- $chars .= pack('C',$byte);
- }
- return $chars;
- }
-
-
- // Convert binary to array of short integers
- function _unpackBytes($string) {
- return unpack('C*',$string);
- }
-
-
- // Add array of short unsigned integers
- function _addBytes($array1,$array2) {
- $result = array();
- $carry = 0;
- foreach ( array_reverse($array1,true) as $value1 ) {
- $value2 = array_pop($array2);
- if ( empty($result) ) { $value2++; }
- $newValue = $value1 + $value2 + $carry;
- if ( $newValue > 255 ) {
- $newValue = $newValue - 256;
- $carry = 1;
- } else {
- $carry = 0;
- }
- array_unshift($result,$newValue);
- }
- return $result;
- }
-
-
- /* Useful Functions */
- function _cdr2Bin ($cdrin,$len=4){
- if ( $len > 4 || $cdrin > 32 ) { // Are we ipv6?
- return str_pad(str_pad("", $cdrin, "1"), 128, "0");
- } else {
- return str_pad(str_pad("", $cdrin, "1"), 32, "0");
- }
- }
-
-
- function _bin2Cdr ($binin){
- return strlen(rtrim($binin,"0"));
- }
-
-
- function _cdr2Char ($cdrin,$len=4){
- $hex = _bin2Hex(_cdr2Bin($cdrin,$len));
- return _hex2Char($hex);
- }
-
-
- function _char2Cdr ($char){
- $bin = _hex2Bin(_char2Hex($char));
- return _bin2Cdr($bin);
- }
-
-
- function _hex2Char($hex){
- return pack('H*',$hex);
- }
-
-
- function _char2Hex($char){
- $hex = unpack('H*',$char);
- return array_pop($hex);
- }
-
-
- function _hex2Bin($hex){
- $bin='';
- for($i=0;$i<strlen($hex);$i++)
- $bin.=str_pad(decbin(hexdec($hex{$i})),4,'0',STR_PAD_LEFT);
- return $bin;
- }
-
-
- function _bin2Hex($bin){
- $hex='';
- for($i=strlen($bin)-4;$i>=0;$i-=4)
- $hex.=dechex(bindec(substr($bin,$i,4)));
- return strrev($hex);
- }
-
- /*
- Converts a v4/v6 subnet to the first usable IP
- */
- function net_to_gw($net){
- $maxSubNets = '2048'; // Stop memory leak from invalid input or large ranges
- $charHost = inet_pton(strtok($net, '/'));
- $charMask = _cdr2Char(strtok('/'),strlen($charHost));
- $charHostMask = substr(_cdr2Char(127),-strlen($charHost));
- $charNet = $charHost & $charMask; // Supernet network address
- $charHostMin = $charNet | ~$charHostMask;
- return inet_ntop($charHostMin);
- }
-
-
-
-
-
-
-
-
-/*
-
- $maxSubNets = '2048'; // Stop memory leak from invalid input or large ranges
- $superNet = '2a02:ed02:180a::13/64';
- if (ereg('/',$superNet)){ //if cidr type mask
- $charHost = inet_pton(strtok($superNet, '/'));
- $charMask = _cdr2Char(strtok('/'),strlen($charHost));
- }
-
- $charHostMask = substr(_cdr2Char(127),-strlen($charHost));
- $charNet = $charHost & $charMask; // Supernet network address
- $charHostMin = $charNet | ~$charHostMask;
- echo 'Første brukbare adresse i ' . $superNet . ': ';
- echo inet_ntop($charHostMin);
-*/
-
-?>
diff --git a/fap/httpd/httpd_root/# create_queries - DEPRECATED/patchlist.txt b/fap/httpd/httpd_root/# create_queries - DEPRECATED/patchlist.txt
deleted file mode 100644
index 7454441..0000000
--- a/fap/httpd/httpd_root/# create_queries - DEPRECATED/patchlist.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-e1-3 distro0 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e3-3 distro0 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e3-4 distro0 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e5-2 distro1 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e5-3 distro0 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e5-4 distro0 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e7-2 distro1 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e7-3 distro0 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e7-4 distro0 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e9-2 distro1 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e9-3 distro0 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e9-4 distro0 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e11-1 distro1 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e11-2 distro1 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e11-3 distro0 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e11-4 distro0 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e13-1 distro1 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e13-2 distro1 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e13-3 distro0 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e13-4 distro0 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e15-1 distro1 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e15-2 distro1 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e15-3 distro0 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e15-4 distro0 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e17-1 distro1 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e17-2 distro1 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e17-3 distro2 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e17-4 distro2 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e19-1 distro1 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e19-2 distro1 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e19-3 distro2 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e19-4 distro2 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e21-1 distro1 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e21-2 distro1 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e21-3 distro2 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e21-4 distro2 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e23-1 distro1 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e23-2 distro1 ge-0/0/16 ge-1/0/16 ge-2/0/16 ge-3/0/16
-e23-3 distro2 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e23-4 distro2 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e25-1 distro1 ge-0/0/17 ge-1/0/17 ge-2/0/17 ge-3/0/17
-e25-2 distro1 ge-0/0/18 ge-1/0/18 ge-2/0/18 ge-3/0/18
-e25-3 distro2 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e25-4 distro2 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e27-1 distro1 ge-0/0/19 ge-1/0/19 ge-2/0/19 ge-3/0/19
-e27-2 distro1 ge-0/0/20 ge-1/0/20 ge-2/0/20 ge-3/0/20
-e27-3 distro2 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e27-4 distro2 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e27-1 distro1 ge-0/0/21 ge-1/0/21 ge-2/0/21 ge-3/0/21
-e27-2 distro1 ge-0/0/22 ge-1/0/22 ge-2/0/22 ge-3/0/22
-e29-1 distro3 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e29-2 distro3 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e31-1 distro3 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e31-2 distro3 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e33-1 distro3 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e33-2 distro3 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e35-1 distro3 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e35-2 distro3 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e37-1 distro3 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e37-2 distro3 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e39-1 distro3 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e39-2 distro3 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e41-1 distro3 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e41-2 distro3 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e43-1 distro3 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e43-2 distro3 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e45-1 distro4 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e45-2 distro4 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e45-3 distro5 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e45-4 distro5 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e47-1 distro4 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e47-2 distro4 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e47-3 distro5 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e47-4 distro5 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e49-1 distro4 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e49-2 distro4 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e49-3 distro5 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e49-4 distro5 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e51-1 distro4 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e51-2 distro4 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e51-3 distro5 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e51-4 distro5 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e53-1 distro4 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e53-2 distro4 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e53-3 distro5 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e53-4 distro5 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e55-1 distro4 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e55-2 distro4 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e55-3 distro5 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e55-4 distro5 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e57-1 distro4 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e57-2 distro4 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e57-3 distro5 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e57-4 distro5 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e59-1 distro4 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e59-2 distro4 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e59-3 distro5 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e59-4 distro5 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e61-1 distro4 ge-0/0/16 ge-1/0/16 ge-2/0/16 ge-3/0/16
-e61-2 distro4 ge-0/0/17 ge-1/0/17 ge-2/0/17 ge-3/0/17
-e61-3 distro5 ge-0/0/16 ge-1/0/16 ge-2/0/16 ge-3/0/16
-e61-4 distro5 ge-0/0/17 ge-1/0/17 ge-2/0/17 ge-3/0/17
-e63-1 distro7 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e63-2 distro7 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e63-3 distro6 ge-0/0/0 ge-1/0/0 ge-2/0/0 ge-3/0/0
-e63-4 distro6 ge-0/0/1 ge-1/0/1 ge-2/0/1 ge-3/0/1
-e65-1 distro7 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e65-2 distro7 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e65-3 distro6 ge-0/0/2 ge-1/0/2 ge-2/0/2 ge-3/0/2
-e65-4 distro6 ge-0/0/3 ge-1/0/3 ge-2/0/3 ge-3/0/3
-e67-1 distro7 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e67-2 distro7 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e67-3 distro6 ge-0/0/4 ge-1/0/4 ge-2/0/4 ge-3/0/4
-e67-4 distro6 ge-0/0/5 ge-1/0/5 ge-2/0/5 ge-3/0/5
-e69-1 distro7 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e69-2 distro7 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e69-3 distro6 ge-0/0/6 ge-1/0/6 ge-2/0/6 ge-3/0/6
-e69-4 distro6 ge-0/0/7 ge-1/0/7 ge-2/0/7 ge-3/0/7
-e71-1 distro7 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e71-2 distro7 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e71-3 distro6 ge-0/0/8 ge-1/0/8 ge-2/0/8 ge-3/0/8
-e71-4 distro6 ge-0/0/9 ge-1/0/9 ge-2/0/9 ge-3/0/9
-e73-1 distro7 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e73-2 distro7 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e73-3 distro6 ge-0/0/10 ge-1/0/10 ge-2/0/10 ge-3/0/10
-e73-4 distro6 ge-0/0/11 ge-1/0/11 ge-2/0/11 ge-3/0/11
-e75-1 distro7 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e75-2 distro7 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e75-3 distro6 ge-0/0/12 ge-1/0/12 ge-2/0/12 ge-3/0/12
-e75-4 distro6 ge-0/0/13 ge-1/0/13 ge-2/0/13 ge-3/0/13
-e77-1 distro7 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e77-2 distro7 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e77-3 distro6 ge-0/0/14 ge-1/0/14 ge-2/0/14 ge-3/0/14
-e77-4 distro6 ge-0/0/15 ge-1/0/15 ge-2/0/15 ge-3/0/15
-e79-1 distro7 ge-0/0/16 ge-1/0/16 ge-2/0/16 ge-3/0/16
-e79-2 distro7 ge-0/0/17 ge-1/0/17 ge-2/0/17 ge-3/0/17
-e79-3 distro6 ge-0/0/16 ge-1/0/16 ge-2/0/16 ge-3/0/16
-e79-4 distro6 ge-0/0/17 ge-1/0/17 ge-2/0/17 ge-3/0/17
-e81-1 distro7 ge-0/0/18 ge-1/0/18 ge-2/0/18 ge-3/0/18
-e81-2 distro7 ge-0/0/19 ge-1/0/19 ge-2/0/19 ge-3/0/19
-e83-1 distro7 ge-0/0/20 ge-1/0/20 ge-2/0/20 ge-3/0/20
-e83-2 distro7 ge-0/0/21 ge-1/0/21 ge-2/0/21 ge-3/0/21
diff --git a/fap/httpd/httpd_root/# create_queries - DEPRECATED/switches.txt b/fap/httpd/httpd_root/# create_queries - DEPRECATED/switches.txt
deleted file mode 100644
index c9d60d9..0000000
--- a/fap/httpd/httpd_root/# create_queries - DEPRECATED/switches.txt
+++ /dev/null
@@ -1,142 +0,0 @@
-e1-3 151.216.129.0/26 2a02:ed02:129a::/64 151.216.180.2/26 2a02:ed02:180a::2/64 1013 distro0
-e3-3 151.216.129.64/26 2a02:ed02:129b::/64 151.216.180.3/26 2a02:ed02:180a::3/64 1033 distro0
-e3-4 151.216.129.128/26 2a02:ed02:129c::/64 151.216.180.4/26 2a02:ed02:180a::4/64 1034 distro0
-e5-2 151.216.129.192/26 2a02:ed02:129d::/64 151.216.180.66/26 2a02:ed02:180b::66/64 1052 distro1
-e5-3 151.216.130.0/26 2a02:ed02:130a::/64 151.216.180.5/26 2a02:ed02:180a::5/64 1053 distro0
-e5-4 151.216.130.64/26 2a02:ed02:130b::/64 151.216.180.6/26 2a02:ed02:180a::6/64 1054 distro0
-e7-2 151.216.130.128/26 2a02:ed02:130c::/64 151.216.180.67/26 2a02:ed02:180b::67/64 1072 distro1
-e7-3 151.216.130.192/26 2a02:ed02:130d::/64 151.216.180.7/26 2a02:ed02:180a::7/64 1073 distro0
-e7-4 151.216.131.0/26 2a02:ed02:131a::/64 151.216.180.8/26 2a02:ed02:180a::8/64 1074 distro0
-e9-2 151.216.131.64/26 2a02:ed02:131b::/64 151.216.180.68/26 2a02:ed02:180b::68/64 1092 distro1
-e9-3 151.216.131.128/26 2a02:ed02:131c::/64 151.216.180.9/26 2a02:ed02:180a::9/64 1093 distro0
-e9-4 151.216.131.192/26 2a02:ed02:131d::/64 151.216.180.10/26 2a02:ed02:180a::10/64 1094 distro0
-e11-1 151.216.132.0/26 2a02:ed02:132a::/64 151.216.180.69/26 2a02:ed02:180b::69/64 1111 distro1
-e11-2 151.216.132.64/26 2a02:ed02:132b::/64 151.216.180.70/26 2a02:ed02:180b::70/64 1112 distro1
-e11-3 151.216.132.128/26 2a02:ed02:132c::/64 151.216.180.11/26 2a02:ed02:180a::11/64 1113 distro0
-e11-4 151.216.132.192/26 2a02:ed02:132d::/64 151.216.180.12/26 2a02:ed02:180a::12/64 1114 distro0
-e13-1 151.216.133.0/26 2a02:ed02:133a::/64 151.216.180.71/26 2a02:ed02:180b::71/64 1131 distro1
-e13-2 151.216.133.64/26 2a02:ed02:133b::/64 151.216.180.72/26 2a02:ed02:180b::72/64 1132 distro1
-e13-3 151.216.133.128/26 2a02:ed02:133c::/64 151.216.180.13/26 2a02:ed02:180a::13/64 1133 distro0
-e13-4 151.216.133.192/26 2a02:ed02:133d::/64 151.216.180.14/26 2a02:ed02:180a::14/64 1134 distro0
-e15-1 151.216.134.0/26 2a02:ed02:134a::/64 151.216.180.73/26 2a02:ed02:180b::73/64 1151 distro1
-e15-2 151.216.134.64/26 2a02:ed02:134b::/64 151.216.180.74/26 2a02:ed02:180b::74/64 1152 distro1
-e15-3 151.216.134.128/26 2a02:ed02:134c::/64 151.216.180.15/26 2a02:ed02:180a::15/64 1153 distro0
-e15-4 151.216.134.192/26 2a02:ed02:134d::/64 151.216.180.16/26 2a02:ed02:180a::16/64 1154 distro0
-e17-1 151.216.135.0/26 2a02:ed02:135a::/64 151.216.180.75/26 2a02:ed02:180b::75/64 1171 distro1
-e17-2 151.216.135.64/26 2a02:ed02:135b::/64 151.216.180.76/26 2a02:ed02:180b::76/64 1172 distro1
-e17-3 151.216.135.128/26 2a02:ed02:135c::/64 151.216.180.130/26 2a02:ed02:180c::130/64 1173 distro2
-e17-4 151.216.135.192/26 2a02:ed02:135d::/64 151.216.180.131/26 2a02:ed02:180c::131/64 1174 distro2
-e19-1 151.216.136.0/26 2a02:ed02:136a::/64 151.216.180.77/26 2a02:ed02:180b::77/64 1191 distro1
-e19-2 151.216.136.64/26 2a02:ed02:136b::/64 151.216.180.78/26 2a02:ed02:180b::78/64 1192 distro1
-e19-3 151.216.136.128/26 2a02:ed02:136c::/64 151.216.180.132/26 2a02:ed02:180c::132/64 1193 distro2
-e19-4 151.216.136.192/26 2a02:ed02:136d::/64 151.216.180.133/26 2a02:ed02:180c::133/64 1194 distro2
-e21-1 151.216.137.0/26 2a02:ed02:137a::/64 151.216.180.79/26 2a02:ed02:180b::79/64 1211 distro1
-e21-2 151.216.137.64/26 2a02:ed02:137b::/64 151.216.180.80/26 2a02:ed02:180b::80/64 1212 distro1
-e21-3 151.216.137.128/26 2a02:ed02:137c::/64 151.216.180.134/26 2a02:ed02:180c::134/64 1213 distro2
-e21-4 151.216.137.192/26 2a02:ed02:137d::/64 151.216.180.135/26 2a02:ed02:180c::135/64 1214 distro2
-e23-1 151.216.138.0/26 2a02:ed02:138a::/64 151.216.180.81/26 2a02:ed02:180b::81/64 1231 distro1
-e23-2 151.216.138.64/26 2a02:ed02:138b::/64 151.216.180.82/26 2a02:ed02:180b::82/64 1232 distro1
-e23-3 151.216.138.128/26 2a02:ed02:138c::/64 151.216.180.136/26 2a02:ed02:180c::136/64 1233 distro2
-e23-4 151.216.138.192/26 2a02:ed02:138d::/64 151.216.180.137/26 2a02:ed02:180c::137/64 1234 distro2
-e25-1 151.216.139.0/26 2a02:ed02:139a::/64 151.216.180.83/26 2a02:ed02:180b::83/64 1251 distro1
-e25-2 151.216.139.64/26 2a02:ed02:139b::/64 151.216.180.84/26 2a02:ed02:180b::84/64 1252 distro1
-e25-3 151.216.139.128/26 2a02:ed02:139c::/64 151.216.180.138/26 2a02:ed02:180c::138/64 1253 distro2
-e25-4 151.216.139.192/26 2a02:ed02:139d::/64 151.216.180.139/26 2a02:ed02:180c::139/64 1254 distro2
-e27-1 151.216.140.0/26 2a02:ed02:140a::/64 151.216.180.85/26 2a02:ed02:180b::85/64 1271 distro1
-e27-2 151.216.140.64/26 2a02:ed02:140b::/64 151.216.180.86/26 2a02:ed02:180b::86/64 1272 distro1
-e27-3 151.216.140.128/26 2a02:ed02:140c::/64 151.216.180.140/26 2a02:ed02:180c::140/64 1273 distro2
-e27-4 151.216.140.192/26 2a02:ed02:140d::/64 151.216.180.141/26 2a02:ed02:180c::141/64 1274 distro2
-e27-1 151.216.141.0/26 2a02:ed02:141a::/64 151.216.180.87/26 2a02:ed02:180b::87/64 1271 distro1
-e27-2 151.216.141.64/26 2a02:ed02:141b::/64 151.216.180.88/26 2a02:ed02:180b::88/64 1272 distro1
-e29-1 151.216.141.128/26 2a02:ed02:141c::/64 151.216.180.194/26 2a02:ed02:180d::194/64 1291 distro3
-e29-2 151.216.141.192/26 2a02:ed02:141d::/64 151.216.180.195/26 2a02:ed02:180d::195/64 1292 distro3
-e31-1 151.216.142.0/26 2a02:ed02:142a::/64 151.216.180.196/26 2a02:ed02:180d::196/64 1311 distro3
-e31-2 151.216.142.64/26 2a02:ed02:142b::/64 151.216.180.197/26 2a02:ed02:180d::197/64 1312 distro3
-e33-1 151.216.142.128/26 2a02:ed02:142c::/64 151.216.180.198/26 2a02:ed02:180d::198/64 1331 distro3
-e33-2 151.216.142.192/26 2a02:ed02:142d::/64 151.216.180.199/26 2a02:ed02:180d::199/64 1332 distro3
-e35-1 151.216.143.0/26 2a02:ed02:143a::/64 151.216.180.200/26 2a02:ed02:180d::200/64 1351 distro3
-e35-2 151.216.143.64/26 2a02:ed02:143b::/64 151.216.180.201/26 2a02:ed02:180d::201/64 1352 distro3
-e37-1 151.216.143.128/26 2a02:ed02:143c::/64 151.216.180.202/26 2a02:ed02:180d::202/64 1371 distro3
-e37-2 151.216.143.192/26 2a02:ed02:143d::/64 151.216.180.203/26 2a02:ed02:180d::203/64 1372 distro3
-e39-1 151.216.144.0/26 2a02:ed02:144a::/64 151.216.180.204/26 2a02:ed02:180d::204/64 1391 distro3
-e39-2 151.216.144.64/26 2a02:ed02:144b::/64 151.216.180.205/26 2a02:ed02:180d::205/64 1392 distro3
-e41-1 151.216.144.128/26 2a02:ed02:144c::/64 151.216.180.206/26 2a02:ed02:180d::206/64 1411 distro3
-e41-2 151.216.144.192/26 2a02:ed02:144d::/64 151.216.180.207/26 2a02:ed02:180d::207/64 1412 distro3
-e43-1 151.216.145.0/26 2a02:ed02:145a::/64 151.216.180.208/26 2a02:ed02:180d::208/64 1431 distro3
-e43-2 151.216.145.64/26 2a02:ed02:145b::/64 151.216.180.209/26 2a02:ed02:180d::209/64 1432 distro3
-e45-1 151.216.145.128/26 2a02:ed02:145c::/64 151.216.181.2/26 2a02:ed02:181a::2/64 1451 distro4
-e45-2 151.216.145.192/26 2a02:ed02:145d::/64 151.216.181.3/26 2a02:ed02:181a::3/64 1452 distro4
-e45-3 151.216.146.0/26 2a02:ed02:146a::/64 151.216.181.66/26 2a02:ed02:181b::66/64 1453 distro5
-e45-4 151.216.146.64/26 2a02:ed02:146b::/64 151.216.181.67/26 2a02:ed02:181b::67/64 1454 distro5
-e47-1 151.216.146.128/26 2a02:ed02:146c::/64 151.216.181.4/26 2a02:ed02:181a::4/64 1471 distro4
-e47-2 151.216.146.192/26 2a02:ed02:146d::/64 151.216.181.5/26 2a02:ed02:181a::5/64 1472 distro4
-e47-3 151.216.147.0/26 2a02:ed02:147a::/64 151.216.181.68/26 2a02:ed02:181b::68/64 1473 distro5
-e47-4 151.216.147.64/26 2a02:ed02:147b::/64 151.216.181.69/26 2a02:ed02:181b::69/64 1474 distro5
-e49-1 151.216.147.128/26 2a02:ed02:147c::/64 151.216.181.6/26 2a02:ed02:181a::6/64 1491 distro4
-e49-2 151.216.147.192/26 2a02:ed02:147d::/64 151.216.181.7/26 2a02:ed02:181a::7/64 1492 distro4
-e49-3 151.216.148.0/26 2a02:ed02:148a::/64 151.216.181.70/26 2a02:ed02:181b::70/64 1493 distro5
-e49-4 151.216.148.64/26 2a02:ed02:148b::/64 151.216.181.71/26 2a02:ed02:181b::71/64 1494 distro5
-e51-1 151.216.148.128/26 2a02:ed02:148c::/64 151.216.181.8/26 2a02:ed02:181a::8/64 1511 distro4
-e51-2 151.216.148.192/26 2a02:ed02:148d::/64 151.216.181.9/26 2a02:ed02:181a::9/64 1512 distro4
-e51-3 151.216.149.0/26 2a02:ed02:149a::/64 151.216.181.72/26 2a02:ed02:181b::72/64 1513 distro5
-e51-4 151.216.149.64/26 2a02:ed02:149b::/64 151.216.181.73/26 2a02:ed02:181b::73/64 1514 distro5
-e53-1 151.216.149.128/26 2a02:ed02:149c::/64 151.216.181.10/26 2a02:ed02:181a::10/64 1531 distro4
-e53-2 151.216.149.192/26 2a02:ed02:149d::/64 151.216.181.11/26 2a02:ed02:181a::11/64 1532 distro4
-e53-3 151.216.150.0/26 2a02:ed02:150a::/64 151.216.181.74/26 2a02:ed02:181b::74/64 1533 distro5
-e53-4 151.216.150.64/26 2a02:ed02:150b::/64 151.216.181.75/26 2a02:ed02:181b::75/64 1534 distro5
-e55-1 151.216.150.128/26 2a02:ed02:150c::/64 151.216.181.12/26 2a02:ed02:181a::12/64 1551 distro4
-e55-2 151.216.150.192/26 2a02:ed02:150d::/64 151.216.181.13/26 2a02:ed02:181a::13/64 1552 distro4
-e55-3 151.216.151.0/26 2a02:ed02:151a::/64 151.216.181.76/26 2a02:ed02:181b::76/64 1553 distro5
-e55-4 151.216.151.64/26 2a02:ed02:151b::/64 151.216.181.77/26 2a02:ed02:181b::77/64 1554 distro5
-e57-1 151.216.151.128/26 2a02:ed02:151c::/64 151.216.181.14/26 2a02:ed02:181a::14/64 1571 distro4
-e57-2 151.216.151.192/26 2a02:ed02:151d::/64 151.216.181.15/26 2a02:ed02:181a::15/64 1572 distro4
-e57-3 151.216.152.0/26 2a02:ed02:152a::/64 151.216.181.78/26 2a02:ed02:181b::78/64 1573 distro5
-e57-4 151.216.152.64/26 2a02:ed02:152b::/64 151.216.181.79/26 2a02:ed02:181b::79/64 1574 distro5
-e59-1 151.216.152.128/26 2a02:ed02:152c::/64 151.216.181.16/26 2a02:ed02:181a::16/64 1591 distro4
-e59-2 151.216.152.192/26 2a02:ed02:152d::/64 151.216.181.17/26 2a02:ed02:181a::17/64 1592 distro4
-e59-3 151.216.153.0/26 2a02:ed02:153a::/64 151.216.181.80/26 2a02:ed02:181b::80/64 1593 distro5
-e59-4 151.216.153.64/26 2a02:ed02:153b::/64 151.216.181.81/26 2a02:ed02:181b::81/64 1594 distro5
-e61-1 151.216.153.128/26 2a02:ed02:153c::/64 151.216.181.18/26 2a02:ed02:181a::18/64 1611 distro4
-e61-2 151.216.153.192/26 2a02:ed02:153d::/64 151.216.181.19/26 2a02:ed02:181a::19/64 1612 distro4
-e61-3 151.216.154.0/26 2a02:ed02:154a::/64 151.216.181.82/26 2a02:ed02:181b::82/64 1613 distro5
-e61-4 151.216.154.64/26 2a02:ed02:154b::/64 151.216.181.83/26 2a02:ed02:181b::83/64 1614 distro5
-e63-1 151.216.154.128/26 2a02:ed02:154c::/64 151.216.181.194/26 2a02:ed02:181d::194/64 1631 distro7
-e63-2 151.216.154.192/26 2a02:ed02:154d::/64 151.216.181.195/26 2a02:ed02:181d::195/64 1632 distro7
-e63-3 151.216.155.0/26 2a02:ed02:155a::/64 151.216.181.130/26 2a02:ed02:181c::130/64 1633 distro6
-e63-4 151.216.155.64/26 2a02:ed02:155b::/64 151.216.181.131/26 2a02:ed02:181c::131/64 1634 distro6
-e65-1 151.216.155.128/26 2a02:ed02:155c::/64 151.216.181.196/26 2a02:ed02:181d::196/64 1651 distro7
-e65-2 151.216.155.192/26 2a02:ed02:155d::/64 151.216.181.197/26 2a02:ed02:181d::197/64 1652 distro7
-e65-3 151.216.156.0/26 2a02:ed02:156a::/64 151.216.181.132/26 2a02:ed02:181c::132/64 1653 distro6
-e65-4 151.216.156.64/26 2a02:ed02:156b::/64 151.216.181.133/26 2a02:ed02:181c::133/64 1654 distro6
-e67-1 151.216.156.128/26 2a02:ed02:156c::/64 151.216.181.198/26 2a02:ed02:181d::198/64 1671 distro7
-e67-2 151.216.156.192/26 2a02:ed02:156d::/64 151.216.181.199/26 2a02:ed02:181d::199/64 1672 distro7
-e67-3 151.216.157.0/26 2a02:ed02:157a::/64 151.216.181.134/26 2a02:ed02:181c::134/64 1673 distro6
-e67-4 151.216.157.64/26 2a02:ed02:157b::/64 151.216.181.135/26 2a02:ed02:181c::135/64 1674 distro6
-e69-1 151.216.157.128/26 2a02:ed02:157c::/64 151.216.181.200/26 2a02:ed02:181d::200/64 1691 distro7
-e69-2 151.216.157.192/26 2a02:ed02:157d::/64 151.216.181.201/26 2a02:ed02:181d::201/64 1692 distro7
-e69-3 151.216.158.0/26 2a02:ed02:158a::/64 151.216.181.136/26 2a02:ed02:181c::136/64 1693 distro6
-e69-4 151.216.158.64/26 2a02:ed02:158b::/64 151.216.181.137/26 2a02:ed02:181c::137/64 1694 distro6
-e71-1 151.216.158.128/26 2a02:ed02:158c::/64 151.216.181.202/26 2a02:ed02:181d::202/64 1711 distro7
-e71-2 151.216.158.192/26 2a02:ed02:158d::/64 151.216.181.203/26 2a02:ed02:181d::203/64 1712 distro7
-e71-3 151.216.159.0/26 2a02:ed02:159a::/64 151.216.181.138/26 2a02:ed02:181c::138/64 1713 distro6
-e71-4 151.216.159.64/26 2a02:ed02:159b::/64 151.216.181.139/26 2a02:ed02:181c::139/64 1714 distro6
-e73-1 151.216.159.128/26 2a02:ed02:159c::/64 151.216.181.204/26 2a02:ed02:181d::204/64 1731 distro7
-e73-2 151.216.159.192/26 2a02:ed02:159d::/64 151.216.181.205/26 2a02:ed02:181d::205/64 1732 distro7
-e73-3 151.216.160.0/26 2a02:ed02:160a::/64 151.216.181.140/26 2a02:ed02:181c::140/64 1733 distro6
-e73-4 151.216.160.64/26 2a02:ed02:160b::/64 151.216.181.141/26 2a02:ed02:181c::141/64 1734 distro6
-e75-1 151.216.160.128/26 2a02:ed02:160c::/64 151.216.181.206/26 2a02:ed02:181d::206/64 1751 distro7
-e75-2 151.216.160.192/26 2a02:ed02:160d::/64 151.216.181.207/26 2a02:ed02:181d::207/64 1752 distro7
-e75-3 151.216.161.0/26 2a02:ed02:161a::/64 151.216.181.142/26 2a02:ed02:181c::142/64 1753 distro6
-e75-4 151.216.161.64/26 2a02:ed02:161b::/64 151.216.181.143/26 2a02:ed02:181c::143/64 1754 distro6
-e77-1 151.216.161.128/26 2a02:ed02:161c::/64 151.216.181.208/26 2a02:ed02:181d::208/64 1771 distro7
-e77-2 151.216.161.192/26 2a02:ed02:161d::/64 151.216.181.209/26 2a02:ed02:181d::209/64 1772 distro7
-e77-3 151.216.162.0/26 2a02:ed02:162a::/64 151.216.181.144/26 2a02:ed02:181c::144/64 1773 distro6
-e77-4 151.216.162.64/26 2a02:ed02:162b::/64 151.216.181.145/26 2a02:ed02:181c::145/64 1774 distro6
-e79-1 151.216.162.128/26 2a02:ed02:162c::/64 151.216.181.210/26 2a02:ed02:181d::210/64 1791 distro7
-e79-2 151.216.162.192/26 2a02:ed02:162d::/64 151.216.181.211/26 2a02:ed02:181d::211/64 1792 distro7
-e79-3 151.216.163.0/26 2a02:ed02:163a::/64 151.216.181.146/26 2a02:ed02:181c::146/64 1793 distro6
-e79-4 151.216.163.64/26 2a02:ed02:163b::/64 151.216.181.147/26 2a02:ed02:181c::147/64 1794 distro6
-e81-1 151.216.163.128/26 2a02:ed02:163c::/64 151.216.181.212/26 2a02:ed02:181d::212/64 1811 distro7
-e81-2 151.216.163.192/26 2a02:ed02:163d::/64 151.216.181.213/26 2a02:ed02:181d::213/64 1812 distro7
-e83-1 151.216.164.0/26 2a02:ed02:164a::/64 151.216.181.214/26 2a02:ed02:181d::214/64 1831 distro7
-e83-2 151.216.164.64/26 2a02:ed02:164b::/64 151.216.181.215/26 2a02:ed02:181d::215/64 1832 distro7
diff --git a/fap/httpd/httpd_root/.gitignore b/fap/httpd/httpd_root/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/fap/httpd/httpd_root/.gitignore
+++ /dev/null
diff --git a/fap/httpd/httpd_root/.htaccess b/fap/httpd/httpd_root/.htaccess
deleted file mode 100755
index 17add11..0000000
--- a/fap/httpd/httpd_root/.htaccess
+++ /dev/null
@@ -1,3 +0,0 @@
-RewriteEngine on
-RewriteRule ^files/(.+)$ x.php?mode=image&file=$1 [L]
-RewriteRule ^tg-edge/(.+)$ x.php?mode=config&hostname=$1 [L]
diff --git a/fap/httpd/httpd_root/ex2200.template b/fap/httpd/httpd_root/ex2200.template
deleted file mode 100755
index 7f3bbaf..0000000
--- a/fap/httpd/httpd_root/ex2200.template
+++ /dev/null
@@ -1,288 +0,0 @@
-system {
- host-name <?php echo $c['hostname']; ?>;
- auto-snapshot;
- time-zone Europe/Oslo;
- authentication-order [ tacplus password ];
- root-authentication {
- encrypted-password "<sensored>";
- }
- name-server {
- 2a02:ed02:1ee7::66;
- 2a02:ed02:1337::2;
- }
- login {
- user technet {
- uid 2000;
- class super-user;
- authentication {
- encrypted-password "<sensored>";
- }
- }
- }
- services {
- ssh {
- root-login deny;
- }
- netconf {
- ssh;
- }
- }
- syslog {
- user * {
- any emergency;
- }
- file messages {
- any notice;
- authorization info;
- }
- file interactive-commands {
- interactive-commands any;
- }
- }
- ntp {
- server 2001:700:100:2::6;
- }
-}
-
-chassis {
- aggregated-devices {
- ethernet {
- device-count 1;
- }
- }
- alarm {
- management-ethernet {
- link-down ignore;
- }
- }
-}
-
-interfaces {
- interface-range edge-ports {
- description "Clients";
- member-range ge-0/0/0 to ge-0/0/43;
- unit 0 {
- family ethernet-switching {
- port-mode access;
- vlan {
- members clients;
- }
- }
- }
- }
- interface-range core-ports {
- description "<?php echo $c['distro_name']; ?> <?php echo $c['distro_phy_port']; ?>";
- member-range ge-0/0/44 to ge-0/0/47;
- ether-options {
- 802.3ad ae0;
- }
- }
- ae0 {
- description "<?php echo $c['distro_name']; ?> <?php echo $c['distro_phy_port']; ?>";
- aggregated-ether-options {
- lacp {
- active;
- }
- }
- unit 0 {
- family ethernet-switching {
- port-mode trunk;
- vlan {
- members [clients mgmt];
- }
- }
- }
- }
- vlan {
- unit <?php echo $c['mgmt_vlan']; ?> {
- description "MGMT L3 interface";
- family inet {
- filter {
- input v4-mgmt;
- }
- address <?php echo $c['mgmt_v4_addr'] . '/' . $c['mgmt_v4_cidr']; ?>;
- }
- family inet6 {
- filter {
- input v6-mgmt;
- }
- address <?php echo $c['mgmt_v6_addr'] . '/' . $c['mgmt_v6_cidr']; ?>;
- }
- }
- }
-}
-
-snmp {
- community <sensored> {
- client-list-name mgmt;
- }
-}
-
-policy-options {
- prefix-list v4-mgmt {
- /* nLogic jumpstation */
- <sensored>
- /* Harald jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 151.216.254.0/24;
- /* Servers */
- 185.12.59.0/26;
- }
- prefix-list v6-mgmt {
- /* Harald jumpstation */
- <sensored>
- /* nLogic jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 2a02:ed02:254::/64;
- /* Servers */
- 2a02:ed02:1337::/64;
- }
- prefix-list mgmt {
- /* nLogic jumpstation */
- <sensored>
- /* Harald jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 151.216.254.0/24;
- /* Servers */
- 185.12.59.0/26;
- /* Harald jumpstation */
- <sensored>
- /* nLogic jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 2a02:ed02:254::/64;
- /* Servers */
- 2a02:ed02:1337::/64;
- }
-}
-firewall {
- family inet {
- filter v4-mgmt {
- term accept-ssh {
- from {
- source-prefix-list {
- v4-mgmt;
- }
- destination-port 22;
- }
- then {
- accept;
- }
- }
- term discard-ssh {
- from {
- destination-port 22;
- }
- then {
- discard;
- }
- }
- term accept-all {
- then {
- accept;
- }
- }
- }
- }
- family inet6 {
- filter v6-mgmt {
- term accept-ssh {
- from {
- source-prefix-list {
- v6-mgmt;
- }
- destination-port 22;
- }
- then {
- accept;
- }
- }
- term discard-ssh {
- from {
- destination-port 22;
- }
- then {
- discard;
- }
- }
- term accept-all {
- then {
-
- accept;
- }
- }
- }
- }
-}
-
-protocols {
- sflow {
- sample-rate {
- ingress 10000;
- egress 10000;
- }
- collector <sensored>;
- interfaces edge-ports;
- interfaces core-ports;
- }
- igmp-snooping {
- vlan all {
- version 3;
- immediate-leave;
- }
- }
- mld-snooping {
- vlan all {
- version 2;
- immediate-leave;
- }
- }
- rstp {
- bridge-priority 8k;
- interface edge-ports {
- edge;
- no-root-port;
- }
- }
- lldp {
- interface ae0.0
- }
-}
-
-vlans {
- clients {
- vlan-id <?php echo $c['traffic_vlan']; ?>;
- }
- mgmt {
- vlan-id <?php echo $c['mgmt_vlan']; ?>;
- l3-interface vlan.<?php echo $c['mgmt_vlan']; ?>;
- }
-}
-
-routing-options {
- rib inet.0 {
- static {
- route 0.0.0.0/0 {
- next-hop <?php echo $c['mgmt_v4_gw']; ?>;
- }
- }
- }
- rib inet6.0 {
- static {
- route ::/0 {
- next-hop <?php echo $c['mgmt_v6_gw']; ?>;
- }
- }
- }
-}
diff --git a/fap/httpd/httpd_root/ex2200_secure.template b/fap/httpd/httpd_root/ex2200_secure.template
deleted file mode 100755
index de9bd3b..0000000
--- a/fap/httpd/httpd_root/ex2200_secure.template
+++ /dev/null
@@ -1,312 +0,0 @@
-system {
- host-name <?php echo $c['hostname']; ?>;
- auto-snapshot;
- time-zone Europe/Oslo;
- authentication-order [ tacplus password ];
- root-authentication {
- encrypted-password "<sensored>";
- }
- name-server {
- 2a02:ed02:1ee7::66;
- 2a02:ed02:1337::2;
- }
- login {
- user technet {
- uid 2000;
- class super-user;
- authentication {
- encrypted-password "<sensored>";
- }
- }
- }
- services {
- ssh {
- root-login deny;
- }
- netconf {
- ssh;
- }
- }
- syslog {
- user * {
- any emergency;
- }
- file messages {
- any notice;
- authorization info;
- }
- file interactive-commands {
- interactive-commands any;
- }
- }
- ntp {
- server 2001:700:100:2::6;
- }
-}
-
-chassis {
- aggregated-devices {
- ethernet {
- device-count 1;
- }
- }
- alarm {
- management-ethernet {
- link-down ignore;
- }
- }
-}
-
-interfaces {
- interface-range edge-ports {
- description "Clients";
- member-range ge-0/0/0 to ge-0/0/43;
- unit 0 {
- family ethernet-switching {
- port-mode access;
- vlan {
- members clients;
- }
- }
- }
- }
- interface-range core-ports {
- description "<?php echo $c['distro_name']; ?> <?php echo $c['distro_phy_port']; ?>";
- member-range ge-0/0/44 to ge-0/0/47;
- ether-options {
- 802.3ad ae0;
- }
- }
- ae0 {
- description "<?php echo $c['distro_name']; ?> <?php echo $c['distro_phy_port']; ?>";
- aggregated-ether-options {
- lacp {
- active;
- }
- }
- unit 0 {
- family ethernet-switching {
- port-mode trunk;
- vlan {
- members [clients mgmt];
- }
- }
- }
- }
- vlan {
- unit <?php echo $c['mgmt_vlan']; ?> {
- description "MGMT L3 interface";
- family inet {
- filter {
- input v4-mgmt;
- }
- address <?php echo $c['mgmt_v4_addr'] . '/' . $c['mgmt_v4_cidr']; ?>;
- }
- family inet6 {
- filter {
- input v6-mgmt;
- }
- address <?php echo $c['mgmt_v6_addr'] . '/' . $c['mgmt_v6_cidr']; ?>;
- }
- }
- }
-}
-
-snmp {
- community <sensored> {
- client-list-name mgmt;
- }
-}
-
-policy-options {
- prefix-list v4-mgmt {
- /* nLogic jumpstation */
- <sensored>
- /* Harald jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 151.216.254.0/24;
- /* Servers */
- 185.12.59.0/26;
- }
- prefix-list v6-mgmt {
- /* Harald jumpstation */
- <sensored>
- /* nLogic jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 2a02:ed02:254::/64;
- /* Servers */
- 2a02:ed02:1337::/64;
- }
- prefix-list mgmt {
- /* nLogic jumpstation */
- <sensored>
- /* Harald jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 151.216.254.0/24;
- /* Servers */
- 185.12.59.0/26;
- /* Harald jumpstation */
- <sensored>
- /* nLogic jumpstation */
- <sensored>
- /* Tech colo-boks */
- <sensored>
- /* NOC clients */
- 2a02:ed02:254::/64;
- /* Servers */
- 2a02:ed02:1337::/64;
- }
-}
-firewall {
- family inet {
- filter v4-mgmt {
- term accept-ssh {
- from {
- source-prefix-list {
- v4-mgmt;
- }
- destination-port 22;
- }
- then {
- accept;
- }
- }
- term discard-ssh {
- from {
- destination-port 22;
- }
- then {
- discard;
- }
- }
- term accept-all {
- then {
- accept;
- }
- }
- }
- }
- family inet6 {
- filter v6-mgmt {
- term accept-ssh {
- from {
- source-prefix-list {
- v6-mgmt;
- }
- destination-port 22;
- }
- then {
- accept;
- }
- }
- term discard-ssh {
- from {
- destination-port 22;
- }
- then {
- discard;
- }
- }
- term accept-all {
- then {
-
- accept;
- }
- }
- }
- }
-}
-
-protocols {
- sflow {
- sample-rate {
- ingress 10000;
- egress 10000;
- }
- collector 91.209.30.12;
- interfaces edge-ports;
- interfaces core-ports;
- }
- igmp-snooping {
- vlan all {
- version 3;
- immediate-leave;
- }
- }
- mld-snooping {
- vlan all {
- version 2;
- immediate-leave;
- }
- }
- rstp {
- bridge-priority 8k;
- interface edge-ports {
- edge;
- no-root-port;
- }
- }
- lldp {
- interface ae0.0
- }
-}
-ethernet-switching-options {
- secure-access-port {
- interface edge-ports {
- no-dhcp-trusted;
- }
- vlan clients {
- arp-inspection;
- examine-dhcp;
- examine-dhcpv6;
- neighbor-discovery-inspection;
- ip-source-guard;
- ipv6-source-guard;
- dhcp-option82;
- dhcpv6-option18 {
- use-option-82;
- }
- }
- ipv6-source-guard-sessions {
- max-number 128;
- }
- }
- storm-control {
- interface all;
- }
-}
-vlans {
- clients {
- vlan-id <?php echo $c['traffic_vlan']; ?>;
- }
- mgmt {
- vlan-id <?php echo $c['mgmt_vlan']; ?>;
- l3-interface vlan.<?php echo $c['mgmt_vlan']; ?>;
- }
-}
-
-routing-options {
- rib inet.0 {
- static {
- route 0.0.0.0/0 {
- next-hop <?php echo $c['mgmt_v4_gw']; ?>;
- }
- }
- }
- rib inet6.0 {
- static {
- route ::/0 {
- next-hop <?php echo $c['mgmt_v6_gw']; ?>;
- }
- }
- }
-}
diff --git a/fap/httpd/httpd_root/pg_connect.php b/fap/httpd/httpd_root/pg_connect.php
deleted file mode 100644
index 6808cb0..0000000
--- a/fap/httpd/httpd_root/pg_connect.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
- if(!$dbconn = pg_connect("host=localhost dbname=fap user=fap password=<sensored>")){
- echo 'Could not connect:' . pg_last_error();
- exit();
- }
-?>
diff --git a/fap/httpd/httpd_root/x.php b/fap/httpd/httpd_root/x.php
deleted file mode 100755
index dda20f2..0000000
--- a/fap/httpd/httpd_root/x.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
- if(isset($_GET['mode'])){
- function log_to_file($text){
- $out = date('c') . ' - ' . $_SERVER['REMOTE_ADDR'] . ' - ' . $text . "\n";
- file_put_contents('../../logs/httpd.log', $out, FILE_APPEND);
- }
-
- if($_GET['mode'] === 'config'){
- # LASTE NED CONFIG
- /*
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename='.basename($file));
- header('Content-Length: ' . filesize('../files/' . $_GET['file']));
- */
-
- # File containing pg_connect() with DB credentials - excluded for GIT safety
- require 'pg_connect.php';
-
-
- $template = 'ex2200.template'; # default template
-
- $pieces = explode('/', $_GET['hostname']);
- if(count($pieces) == 2){
- $_GET['hostname'] = $pieces[0];
- if($pieces[1] == 'secure'){
- $template = 'ex2200_secure.template';
- }
- }
-
-
- // Performing SQL query
- $query = 'SELECT * FROM switches WHERE hostname = \'' . $_GET['hostname'] . '\'';
- $result = pg_query($query) or die('Query failed: ' . pg_last_error());
- if(pg_num_rows($result) == 1){
- $c = pg_fetch_assoc($result);
- include $template;
- log_to_file('Served ' . $template . ' to client');
- }else{
- log_to_file('Hostname not found in DB');
- header("HTTP/1.0 404 Not Found");
- exit();
- }
-
- }elseif($_GET['mode'] === 'image'){
- if(isset($_GET['file']) && is_readable('../files/' . $_GET['file'])){
- # SEND IMAGE
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename='.basename($file));
- header('Content-Length: ' . filesize('../files/' . $_GET['file']));
-
- $time_start = microtime(true);
- $bytes = readfile('../files/' . $_GET['file']);
- $time_end = microtime(true);
- $time = $time_end - $time_start;
-
- log_to_file('Transferred "' . $_GET['file'] . '" in ' . round($time, 2) . 'sec (' . round(($bytes/$time)/(1024*128), 2) . 'Mbit/s)');
- }else{
- log_to_file('404 - File not found');
- header("HTTP/1.1 404 Not Found");
- exit();
- }
-
- }
- }
-?>
diff --git a/fap/logs/httpd.log b/fap/logs/httpd.log
deleted file mode 100644
index 8571480..0000000
--- a/fap/logs/httpd.log
+++ /dev/null
@@ -1,667 +0,0 @@
-2015-03-30T08:01:36+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T08:01:43+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:10:24+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:10:26+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:10:56+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:10:59+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:12:12+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:12:25+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:36:39+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:36:57+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T00:37:06+02:00 - 151.216.183.130 - Served ex2200.template to client
-2015-03-30T00:37:40+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T00:38:13+02:00 - 150.70.97.117 - Served ex2200.template to client
-2015-03-30T00:39:15+02:00 - 150.70.173.10 - Served ex2200.template to client
-2015-03-30T00:42:10+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T00:46:07+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T00:47:24+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:47:26+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T00:47:43+02:00 - 151.216.183.130 - Served ex2200.template to client
-2015-03-30T00:53:45+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-30T00:53:54+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-30T00:54:33+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-30T00:54:42+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-30T00:54:47+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-30T01:12:55+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:25:53+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:25:55+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:25:56+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:26:15+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:26:17+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:27:17+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:27:23+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:27:45+02:00 - 151.216.254.32 - Served ex2200_secure.template to client
-2015-03-30T01:27:49+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T01:31:37+02:00 - 151.216.254.19 - Served ex2200_secure.template to client
-2015-03-30T01:31:46+02:00 - 151.216.183.130 - Served ex2200_secure.template to client
-2015-03-30T01:33:11+02:00 - 150.70.97.99 - Served ex2200_secure.template to client
-2015-03-30T02:39:48+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T02:42:44+02:00 - 151.216.254.19 - Served ex2200.template to client
-2015-03-30T15:33:26+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-03-30T15:33:26+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-03-30T15:35:26+02:00 - 150.70.173.45 - Served ex2200_secure.template to client
-2015-03-30T15:41:53+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-30T15:41:58+02:00 - 151.216.254.32 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:42:31+02:00 - 151.216.254.200 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:43:07+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:43:11+02:00 - 150.70.173.53 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:43:42+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:48:06+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T15:55:00+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T16:21:28+02:00 - 151.216.254.32 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T16:29:06+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~0Mbit/s)
-2015-03-30T16:56:52+02:00 - 151.216.180.3 - Served ex2200.template to client
-2015-03-30T16:56:53+02:00 - 151.216.180.4 - Served ex2200.template to client
-2015-03-30T16:56:55+02:00 - 151.216.180.2 - Served ex2200.template to client
-2015-03-30T16:59:18+02:00 - 151.216.180.4 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.16sec (~5.8715227044515Mbit/s)
-2015-03-30T16:59:19+02:00 - 151.216.180.3 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.77sec (~5.806672930464Mbit/s)
-2015-03-30T16:59:23+02:00 - 151.216.180.2 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.51sec (~5.7381785172106Mbit/s)
-2015-03-30T17:45:52+02:00 - 151.216.128.39 - Transferred "distro0.conf" in 0sec (~1925.07Mbit/s)
-2015-03-30T17:46:04+02:00 - 151.216.128.39 - Transferred "distro1.conf" in 0sec (~2592.55Mbit/s)
-2015-03-30T17:52:57+02:00 - 151.216.254.32 - Transferred "distro0.conf" in 0sec (~2094.98Mbit/s)
-2015-03-30T17:53:53+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (~2013.31Mbit/s)
-2015-03-30T18:02:19+02:00 - 151.216.254.32 - Transferred "distro0.conf" in 0sec (~1821.57Mbit/s)
-2015-03-30T18:03:50+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (2150.91Mbit/s)
-2015-03-30T18:53:02+02:00 - 151.216.180.81 - Served ex2200.template to client
-2015-03-30T18:55:28+02:00 - 151.216.180.81 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.69sec (5.81Mbit/s)
-2015-03-30T19:06:21+02:00 - 151.216.128.43 - Transferred "distro0.conf" in 0sec (2123.73Mbit/s)
-2015-03-30T19:06:58+02:00 - 151.216.128.39 - Transferred "distro1.conf" in 0sec (2464.54Mbit/s)
-2015-03-30T19:09:53+02:00 - 151.216.128.39 - Transferred "distro1.conf" in 0sec (2561.39Mbit/s)
-2015-03-30T19:43:30+02:00 - 151.216.128.41 - Transferred "distro2.conf" in 0sec (1562.09Mbit/s)
-2015-03-30T19:47:40+02:00 - 151.216.180.76 - Served ex2200.template to client
-2015-03-30T19:48:03+02:00 - 151.216.180.75 - Served ex2200.template to client
-2015-03-30T19:49:12+02:00 - 151.216.180.73 - Served ex2200.template to client
-2015-03-30T19:49:32+02:00 - 151.216.180.76 - Served ex2200.template to client
-2015-03-30T19:50:34+02:00 - 151.216.180.75 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.92sec (5.61Mbit/s)
-2015-03-30T19:51:35+02:00 - 151.216.180.84 - Served ex2200.template to client
-2015-03-30T19:51:38+02:00 - 151.216.180.73 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.03sec (5.8Mbit/s)
-2015-03-30T19:52:03+02:00 - 151.216.180.76 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.89sec (5.65Mbit/s)
-2015-03-30T19:52:39+02:00 - 151.216.180.69 - Served ex2200.template to client
-2015-03-30T19:53:30+02:00 - 151.216.180.83 - Served ex2200.template to client
-2015-03-30T19:53:45+02:00 - 151.216.180.67 - Served ex2200.template to client
-2015-03-30T19:54:11+02:00 - 151.216.180.84 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 155.06sec (5.46Mbit/s)
-2015-03-30T19:55:07+02:00 - 151.216.180.69 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.25sec (5.75Mbit/s)
-2015-03-30T19:55:37+02:00 - 151.216.180.82 - Served ex2200.template to client
-2015-03-30T19:55:44+02:00 - 151.216.180.74 - Served ex2200.template to client
-2015-03-30T19:56:12+02:00 - 151.216.180.83 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 162.23sec (5.22Mbit/s)
-2015-03-30T19:56:14+02:00 - 151.216.180.67 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.83sec (5.73Mbit/s)
-2015-03-30T19:56:22+02:00 - 151.216.180.80 - Served ex2200.template to client
-2015-03-30T19:57:07+02:00 - 151.216.180.79 - Served ex2200.template to client
-2015-03-30T19:58:22+02:00 - 151.216.180.74 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 157.61sec (5.37Mbit/s)
-2015-03-30T19:58:31+02:00 - 151.216.180.82 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 172.86sec (4.9Mbit/s)
-2015-03-30T19:58:48+02:00 - 151.216.180.80 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.61sec (5.81Mbit/s)
-2015-03-30T19:59:34+02:00 - 151.216.180.79 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.59sec (5.81Mbit/s)
-2015-03-30T20:05:35+02:00 - 151.216.180.71 - Served ex2200.template to client
-2015-03-30T20:07:06+02:00 - 151.216.254.32 - Transferred "fap.sql" in 0sec (2289Mbit/s)
-2015-03-30T20:08:03+02:00 - 151.216.180.71 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.28sec (5.75Mbit/s)
-2015-03-30T20:08:24+02:00 - 151.216.180.85 - Served ex2200.template to client
-2015-03-30T20:08:25+02:00 - 151.216.180.86 - Served ex2200.template to client
-2015-03-30T20:10:51+02:00 - 151.216.180.85 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.65sec (5.81Mbit/s)
-2015-03-30T20:10:52+02:00 - 151.216.180.86 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.59sec (5.77Mbit/s)
-2015-03-30T21:02:13+02:00 - 151.216.128.41 - Transferred "distro0.conf" in 0sec (1750.68Mbit/s)
-2015-03-30T21:02:24+02:00 - 151.216.128.41 - Transferred "distro2.conf" in 0sec (1640.49Mbit/s)
-2015-03-30T21:13:20+02:00 - 151.216.128.37 - Transferred "distro3.conf" in 0sec (1923.68Mbit/s)
-2015-03-30T21:21:24+02:00 - 151.216.128.35 - Transferred "distro5.conf" in 0sec (2082.34Mbit/s)
-2015-03-30T21:29:05+02:00 - 151.216.128.33 - Transferred "distro4.conf" in 0sec (2072.46Mbit/s)
-2015-03-30T21:30:04+02:00 - 151.216.128.35 - Transferred "distro5.conf" in 0sec (1884.14Mbit/s)
-2015-03-30T21:32:25+02:00 - 151.216.128.31 - Transferred "distro6.conf" in 0sec (1875.11Mbit/s)
-2015-03-30T21:33:25+02:00 - 151.216.128.29 - Transferred "distro7.conf" in 0sec (2184.1Mbit/s)
-2015-03-30T21:53:03+02:00 - 151.216.180.138 - Served ex2200.template to client
-2015-03-30T21:55:33+02:00 - 151.216.180.138 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.29sec (5.67Mbit/s)
-2015-03-30T22:00:33+02:00 - 151.216.180.201 - Served ex2200.template to client
-2015-03-30T22:01:20+02:00 - 151.216.180.139 - Served ex2200.template to client
-2015-03-30T22:01:27+02:00 - 151.216.180.200 - Served ex2200.template to client
-2015-03-30T22:02:13+02:00 - 151.216.180.198 - Served ex2200.template to client
-2015-03-30T22:03:00+02:00 - 151.216.180.201 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.64sec (5.77Mbit/s)
-2015-03-30T22:03:48+02:00 - 151.216.180.139 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.75sec (5.73Mbit/s)
-2015-03-30T22:03:54+02:00 - 151.216.180.200 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.38sec (5.78Mbit/s)
-2015-03-30T22:04:38+02:00 - 151.216.180.198 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.1sec (5.83Mbit/s)
-2015-03-30T22:05:02+02:00 - 151.216.180.138 - Served ex2200.template to client
-2015-03-30T22:07:32+02:00 - 151.216.180.138 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.03sec (5.68Mbit/s)
-2015-03-30T22:07:35+02:00 - 151.216.180.141 - Served ex2200.template to client
-2015-03-30T22:10:04+02:00 - 151.216.180.141 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.29sec (5.71Mbit/s)
-2015-03-30T22:10:41+02:00 - 151.216.180.140 - Served ex2200.template to client
-2015-03-30T22:13:11+02:00 - 151.216.180.140 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.87sec (5.69Mbit/s)
-2015-03-30T22:13:12+02:00 - 151.216.180.132 - Served ex2200.template to client
-2015-03-30T22:14:04+02:00 - 151.216.180.130 - Served ex2200.template to client
-2015-03-30T22:14:59+02:00 - 151.216.180.133 - Served ex2200.template to client
-2015-03-30T22:15:33+02:00 - 151.216.180.135 - Served ex2200.template to client
-2015-03-30T22:15:54+02:00 - 151.216.180.132 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 161.39sec (5.24Mbit/s)
-2015-03-30T22:16:38+02:00 - 151.216.180.130 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 153.35sec (5.52Mbit/s)
-2015-03-30T22:17:55+02:00 - 151.216.180.133 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 176.05sec (4.81Mbit/s)
-2015-03-30T22:18:18+02:00 - 151.216.180.135 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 164.34sec (5.15Mbit/s)
-2015-03-30T22:18:47+02:00 - 151.216.180.136 - Served ex2200.template to client
-2015-03-30T22:21:14+02:00 - 151.216.180.136 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.65sec (5.77Mbit/s)
-2015-03-30T22:22:23+02:00 - 151.216.180.131 - Served ex2200.template to client
-2015-03-30T22:25:23+02:00 - 151.216.180.131 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 178.4sec (4.74Mbit/s)
-2015-03-30T22:27:06+02:00 - 151.216.180.134 - Served ex2200.template to client
-2015-03-30T22:29:34+02:00 - 151.216.180.134 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.06sec (5.72Mbit/s)
-2015-03-30T23:18:19+02:00 - 151.216.180.207 - Served ex2200.template to client
-2015-03-30T23:20:01+02:00 - 151.216.180.204 - Served ex2200.template to client
-2015-03-30T23:20:49+02:00 - 151.216.180.207 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.01sec (5.64Mbit/s)
-2015-03-30T23:22:24+02:00 - 151.216.180.205 - Served ex2200.template to client
-2015-03-30T23:22:29+02:00 - 151.216.180.204 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.54sec (5.74Mbit/s)
-2015-03-30T23:24:54+02:00 - 151.216.180.205 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.91sec (5.68Mbit/s)
-2015-03-30T23:25:12+02:00 - 151.216.180.194 - Served ex2200.template to client
-2015-03-30T23:27:43+02:00 - 151.216.180.194 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.22sec (5.63Mbit/s)
-2015-03-30T23:28:34+02:00 - 151.216.181.132 - Served ex2200.template to client
-2015-03-30T23:28:52+02:00 - 151.216.180.195 - Served ex2200.template to client
-2015-03-30T23:29:05+02:00 - 151.216.181.132 - Served ex2200.template to client
-2015-03-30T23:30:51+02:00 - 151.216.180.206 - Served ex2200.template to client
-2015-03-30T23:31:21+02:00 - 151.216.180.195 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.95sec (5.68Mbit/s)
-2015-03-30T23:33:19+02:00 - 151.216.180.206 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.9sec (5.72Mbit/s)
-2015-03-30T23:34:57+02:00 - 151.216.181.133 - Served ex2200.template to client
-2015-03-30T23:35:11+02:00 - 151.216.181.132 - Served ex2200.template to client
-2015-03-30T23:36:26+02:00 - 151.216.180.199 - Served ex2200.template to client
-2015-03-30T23:37:28+02:00 - 151.216.181.133 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.24sec (5.63Mbit/s)
-2015-03-30T23:37:41+02:00 - 151.216.181.132 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.41sec (5.67Mbit/s)
-2015-03-30T23:38:35+02:00 - 151.216.180.197 - Served ex2200.template to client
-2015-03-30T23:38:45+02:00 - 151.216.181.131 - Served ex2200.template to client
-2015-03-30T23:38:56+02:00 - 151.216.180.199 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.71sec (5.65Mbit/s)
-2015-03-30T23:39:00+02:00 - 151.216.181.130 - Served ex2200.template to client
-2015-03-30T23:40:44+02:00 - 151.216.180.196 - Served ex2200.template to client
-2015-03-30T23:41:06+02:00 - 151.216.180.197 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.7sec (5.62Mbit/s)
-2015-03-30T23:41:14+02:00 - 151.216.181.131 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.73sec (5.73Mbit/s)
-2015-03-30T23:41:29+02:00 - 151.216.181.130 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.52sec (5.7Mbit/s)
-2015-03-30T23:42:25+02:00 - 151.216.254.32 - Transferred "rs1.backstage.conf" in 0sec (429.68Mbit/s)
-2015-03-30T23:43:13+02:00 - 151.216.180.196 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.09sec (5.68Mbit/s)
-2015-03-30T23:45:12+02:00 - 151.216.180.203 - Served ex2200.template to client
-2015-03-30T23:46:42+02:00 - 151.216.180.202 - Served ex2200.template to client
-2015-03-30T23:47:17+02:00 - 151.216.254.203 - Transferred "rs1.backstage.conf" in 0sec (571.5Mbit/s)
-2015-03-30T23:47:40+02:00 - 151.216.180.203 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.52sec (5.74Mbit/s)
-2015-03-30T23:48:57+02:00 - 151.216.181.13 - Served ex2200.template to client
-2015-03-30T23:49:11+02:00 - 151.216.180.202 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.78sec (5.73Mbit/s)
-2015-03-30T23:51:25+02:00 - 151.216.181.13 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.59sec (5.74Mbit/s)
-2015-03-30T23:52:50+02:00 - 151.216.181.5 - Served ex2200.template to client
-2015-03-30T23:53:06+02:00 - 151.216.181.10 - Served ex2200.template to client
-2015-03-30T23:53:45+02:00 - 151.216.181.12 - Served ex2200.template to client
-2015-03-30T23:53:45+02:00 - 151.216.181.4 - Served ex2200.template to client
-2015-03-30T23:53:57+02:00 - 151.216.181.3 - Served ex2200.template to client
-2015-03-30T23:54:16+02:00 - 151.216.180.208 - Served ex2200.template to client
-2015-03-30T23:54:28+02:00 - 151.216.181.2 - Served ex2200.template to client
-2015-03-30T23:54:31+02:00 - 151.216.180.209 - Served ex2200.template to client
-2015-03-30T23:55:32+02:00 - 151.216.181.10 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.12sec (5.83Mbit/s)
-2015-03-30T23:55:34+02:00 - 151.216.254.203 - Transferred "rs1.backstage.conf" in 0sec (526.75Mbit/s)
-2015-03-30T23:55:39+02:00 - 151.216.181.5 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 168.81sec (5.01Mbit/s)
-2015-03-30T23:56:25+02:00 - 151.216.181.3 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.86sec (5.72Mbit/s)
-2015-03-30T23:56:34+02:00 - 151.216.181.12 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 168.13sec (5.03Mbit/s)
-2015-03-30T23:56:42+02:00 - 151.216.128.21 - Transferred "rs1.backstage.conf" in 0sec (429.68Mbit/s)
-2015-03-30T23:56:43+02:00 - 151.216.181.4 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 176.63sec (4.79Mbit/s)
-2015-03-30T23:56:56+02:00 - 151.216.181.2 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.48sec (5.74Mbit/s)
-2015-03-30T23:57:02+02:00 - 151.216.180.208 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 164.93sec (5.13Mbit/s)
-2015-03-30T23:57:13+02:00 - 151.216.181.11 - Served ex2200.template to client
-2015-03-30T23:57:25+02:00 - 151.216.180.209 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 173.05sec (4.89Mbit/s)
-2015-03-30T23:58:12+02:00 - 151.216.181.9 - Served ex2200.template to client
-2015-03-31T00:00:06+02:00 - 151.216.181.11 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 172.59sec (4.9Mbit/s)
-2015-03-31T00:00:14+02:00 - 151.216.181.8 - Served ex2200.template to client
-2015-03-31T00:00:46+02:00 - 151.216.128.21 - Transferred "rs1.backstage.conf" in 0sec (631.34Mbit/s)
-2015-03-31T00:01:00+02:00 - 151.216.181.7 - Served ex2200.template to client
-2015-03-31T00:01:08+02:00 - 151.216.181.9 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 175.41sec (4.83Mbit/s)
-2015-03-31T00:01:23+02:00 - 151.216.181.6 - Served ex2200.template to client
-2015-03-31T00:02:40+02:00 - 151.216.181.8 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.22sec (5.83Mbit/s)
-2015-03-31T00:02:49+02:00 - 151.216.181.15 - Served ex2200.template to client
-2015-03-31T00:03:30+02:00 - 151.216.181.7 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.02sec (5.68Mbit/s)
-2015-03-31T00:03:52+02:00 - 151.216.181.6 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.05sec (5.72Mbit/s)
-2015-03-31T00:04:41+02:00 - 151.216.181.134 - Served ex2200.template to client
-2015-03-31T00:05:30+02:00 - 151.216.181.15 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 159.57sec (5.3Mbit/s)
-2015-03-31T00:05:36+02:00 - 151.216.181.17 - Served ex2200.template to client
-2015-03-31T00:06:50+02:00 - 151.216.181.16 - Served ex2200.template to client
-2015-03-31T00:07:08+02:00 - 151.216.181.134 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.07sec (5.76Mbit/s)
-2015-03-31T00:07:33+02:00 - 151.216.181.18 - Served ex2200.template to client
-2015-03-31T00:08:03+02:00 - 151.216.181.17 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.12sec (5.79Mbit/s)
-2015-03-31T00:08:51+02:00 - 151.216.181.19 - Served ex2200.template to client
-2015-03-31T00:09:33+02:00 - 151.216.181.16 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 161.64sec (5.24Mbit/s)
-2015-03-31T00:09:43+02:00 - 151.216.181.139 - Served ex2200.template to client
-2015-03-31T00:10:01+02:00 - 151.216.181.135 - Served ex2200.template to client
-2015-03-31T00:10:17+02:00 - 151.216.181.14 - Served ex2200.template to client
-2015-03-31T00:10:31+02:00 - 151.216.181.18 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 176.87sec (4.79Mbit/s)
-2015-03-31T00:11:13+02:00 - 151.216.181.138 - Served ex2200.template to client
-2015-03-31T00:11:28+02:00 - 151.216.181.19 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 156.67sec (5.4Mbit/s)
-2015-03-31T00:11:41+02:00 - 151.216.181.83 - Served ex2200.template to client
-2015-03-31T00:12:43+02:00 - 151.216.181.135 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 160.91sec (5.26Mbit/s)
-2015-03-31T00:12:44+02:00 - 151.216.181.14 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.26sec (5.79Mbit/s)
-2015-03-31T00:12:48+02:00 - 151.216.181.139 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 184.22sec (4.59Mbit/s)
-2015-03-31T00:13:23+02:00 - 151.216.181.82 - Served ex2200.template to client
-2015-03-31T00:13:40+02:00 - 151.216.181.138 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.63sec (5.77Mbit/s)
-2015-03-31T00:14:10+02:00 - 151.216.181.83 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.42sec (5.7Mbit/s)
-2015-03-31T00:15:07+02:00 - 151.216.181.140 - Served ex2200.template to client
-2015-03-31T00:15:54+02:00 - 151.216.181.82 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.1sec (5.64Mbit/s)
-2015-03-31T00:17:35+02:00 - 151.216.181.140 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.53sec (5.74Mbit/s)
-2015-03-31T00:18:38+02:00 - 151.216.181.141 - Served ex2200.template to client
-2015-03-31T00:21:08+02:00 - 151.216.181.141 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.82sec (5.69Mbit/s)
-2015-03-31T00:21:13+02:00 - 151.216.181.195 - Served ex2200.template to client
-2015-03-31T00:22:48+02:00 - 151.216.181.196 - Served ex2200.template to client
-2015-03-31T00:23:10+02:00 - 151.216.181.81 - Served ex2200.template to client
-2015-03-31T00:23:40+02:00 - 151.216.181.195 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.11sec (5.79Mbit/s)
-2015-03-31T00:24:08+02:00 - 151.216.181.80 - Served ex2200.template to client
-2015-03-31T00:25:08+02:00 - 151.216.181.78 - Served ex2200.template to client
-2015-03-31T00:25:16+02:00 - 151.216.181.196 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.02sec (5.76Mbit/s)
-2015-03-31T00:25:36+02:00 - 151.216.254.32 - Transferred "rs1.backstage.conf" in 0sec (571.5Mbit/s)
-2015-03-31T00:25:56+02:00 - 151.216.181.143 - Served ex2200.template to client
-2015-03-31T00:25:58+02:00 - 151.216.181.81 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 168.12sec (5.03Mbit/s)
-2015-03-31T00:26:17+02:00 - 151.216.181.76 - Served ex2200.template to client
-2015-03-31T00:26:37+02:00 - 151.216.181.80 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.59sec (5.7Mbit/s)
-2015-03-31T00:26:42+02:00 - 151.216.181.77 - Served ex2200.template to client
-2015-03-31T00:26:43+02:00 - 151.216.181.194 - Served ex2200.template to client
-2015-03-31T00:27:30+02:00 - 151.216.181.197 - Served ex2200.template to client
-2015-03-31T00:27:36+02:00 - 151.216.181.78 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.78sec (5.77Mbit/s)
-2015-03-31T00:28:22+02:00 - 151.216.181.143 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.06sec (5.84Mbit/s)
-2015-03-31T00:28:44+02:00 - 151.216.181.76 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.69sec (5.77Mbit/s)
-2015-03-31T00:29:12+02:00 - 151.216.181.194 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.64sec (5.73Mbit/s)
-2015-03-31T00:29:12+02:00 - 151.216.181.77 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.86sec (5.69Mbit/s)
-2015-03-31T00:29:41+02:00 - 151.216.181.74 - Served ex2200.template to client
-2015-03-31T00:30:01+02:00 - 151.216.181.197 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.1sec (5.64Mbit/s)
-2015-03-31T00:30:32+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-31T00:30:39+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-31T00:31:00+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-31T00:31:55+02:00 - 151.216.181.75 - Served ex2200.template to client
-2015-03-31T00:32:07+02:00 - 151.216.254.32 - Transferred "rs1.backstage.conf" in 0sec (579.07Mbit/s)
-2015-03-31T00:32:10+02:00 - 151.216.181.74 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.45sec (5.7Mbit/s)
-2015-03-31T00:32:52+02:00 - 151.216.128.21 - Transferred "rs1.backstage.conf" in 0sec (613.61Mbit/s)
-2015-03-31T00:33:25+02:00 - 151.216.181.142 - Served ex2200.template to client
-2015-03-31T00:33:57+02:00 - 151.216.181.66 - Served ex2200.template to client
-2015-03-31T00:34:24+02:00 - 151.216.181.75 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.76sec (5.73Mbit/s)
-2015-03-31T00:35:07+02:00 - 151.216.181.213 - Served ex2200.template to client
-2015-03-31T00:35:55+02:00 - 151.216.181.142 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.48sec (5.66Mbit/s)
-2015-03-31T00:36:27+02:00 - 151.216.181.66 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.87sec (5.69Mbit/s)
-2015-03-31T00:36:48+02:00 - 151.216.181.211 - Served ex2200.template to client
-2015-03-31T00:37:35+02:00 - 151.216.181.213 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.73sec (5.77Mbit/s)
-2015-03-31T00:38:17+02:00 - 151.216.181.67 - Served ex2200.template to client
-2015-03-31T00:39:16+02:00 - 151.216.181.211 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.09sec (5.75Mbit/s)
-2015-03-31T00:40:06+02:00 - 151.216.181.68 - Served ex2200.template to client
-2015-03-31T00:40:46+02:00 - 151.216.181.67 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.65sec (5.69Mbit/s)
-2015-03-31T00:41:14+02:00 - 151.216.181.70 - Served ex2200.template to client
-2015-03-31T00:42:35+02:00 - 151.216.181.68 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.44sec (5.7Mbit/s)
-2015-03-31T00:43:05+02:00 - 151.216.181.72 - Served ex2200.template to client
-2015-03-31T00:43:21+02:00 - 151.216.181.210 - Served ex2200.template to client
-2015-03-31T00:43:43+02:00 - 151.216.181.70 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.55sec (5.7Mbit/s)
-2015-03-31T00:43:59+02:00 - 151.216.181.208 - Served ex2200.template to client
-2015-03-31T00:45:34+02:00 - 151.216.181.72 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.28sec (5.71Mbit/s)
-2015-03-31T00:45:49+02:00 - 151.216.181.71 - Served ex2200.template to client
-2015-03-31T00:45:51+02:00 - 151.216.181.210 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.4sec (5.7Mbit/s)
-2015-03-31T00:46:29+02:00 - 151.216.181.208 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.25sec (5.67Mbit/s)
-2015-03-31T00:46:34+02:00 - 151.216.181.73 - Served ex2200.template to client
-2015-03-31T00:48:17+02:00 - 151.216.181.71 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.01sec (5.72Mbit/s)
-2015-03-31T00:49:01+02:00 - 151.216.181.73 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.74sec (5.81Mbit/s)
-2015-03-31T00:50:18+02:00 - 151.216.183.163 - Served ex2200.template to client
-2015-03-31T00:50:56+02:00 - 151.216.181.145 - Served ex2200.template to client
-2015-03-31T00:51:37+02:00 - 151.216.181.144 - Served ex2200.template to client
-2015-03-31T00:52:46+02:00 - 151.216.183.163 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.39sec (5.74Mbit/s)
-2015-03-31T00:53:24+02:00 - 151.216.181.145 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.85sec (5.72Mbit/s)
-2015-03-31T00:54:06+02:00 - 151.216.181.144 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.58sec (5.7Mbit/s)
-2015-03-31T00:57:03+02:00 - 151.216.181.206 - Served ex2200.template to client
-2015-03-31T00:57:54+02:00 - 151.216.181.146 - Served ex2200.template to client
-2015-03-31T00:57:59+02:00 - 151.216.181.147 - Served ex2200.template to client
-2015-03-31T00:59:29+02:00 - 151.216.181.206 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.33sec (5.82Mbit/s)
-2015-03-31T00:59:34+02:00 - 151.216.180.5 - Served ex2200.template to client
-2015-03-31T01:00:20+02:00 - 151.216.181.146 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.83sec (5.8Mbit/s)
-2015-03-31T01:00:27+02:00 - 151.216.181.209 - Served ex2200.template to client
-2015-03-31T01:00:38+02:00 - 151.216.181.147 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 158.34sec (5.35Mbit/s)
-2015-03-31T01:01:59+02:00 - 151.216.181.199 - Served ex2200.template to client
-2015-03-31T01:02:02+02:00 - 151.216.180.5 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.18sec (5.75Mbit/s)
-2015-03-31T01:02:54+02:00 - 151.216.181.209 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.56sec (5.81Mbit/s)
-2015-03-31T01:04:16+02:00 - 151.216.180.12 - Served ex2200.template to client
-2015-03-31T01:04:27+02:00 - 151.216.181.199 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.46sec (5.74Mbit/s)
-2015-03-31T01:04:37+02:00 - 151.216.181.215 - Served ex2200.template to client
-2015-03-31T01:05:22+02:00 - 151.216.180.11 - Served ex2200.template to client
-2015-03-31T01:05:57+02:00 - 151.216.181.214 - Served ex2200.template to client
-2015-03-31T01:06:30+02:00 - 151.216.180.10 - Served ex2200.template to client
-2015-03-31T01:06:46+02:00 - 151.216.180.12 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.39sec (5.67Mbit/s)
-2015-03-31T01:07:07+02:00 - 151.216.181.215 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.77sec (5.69Mbit/s)
-2015-03-31T01:07:39+02:00 - 151.216.181.207 - Served ex2200.template to client
-2015-03-31T01:07:41+02:00 - 151.216.181.212 - Served ex2200.template to client
-2015-03-31T01:07:50+02:00 - 151.216.180.11 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.92sec (5.72Mbit/s)
-2015-03-31T01:08:25+02:00 - 151.216.181.214 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.31sec (5.71Mbit/s)
-2015-03-31T01:08:51+02:00 - 151.216.180.9 - Served ex2200.template to client
-2015-03-31T01:08:53+02:00 - 151.216.181.207 - Served ex2200.template to client
-2015-03-31T01:09:00+02:00 - 151.216.180.10 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.21sec (5.67Mbit/s)
-2015-03-31T01:09:32+02:00 - 151.216.180.13 - Served ex2200.template to client
-2015-03-31T01:09:44+02:00 - 151.216.181.198 - Served ex2200.template to client
-2015-03-31T01:10:11+02:00 - 151.216.181.212 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.55sec (5.66Mbit/s)
-2015-03-31T01:11:20+02:00 - 151.216.180.9 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.59sec (5.7Mbit/s)
-2015-03-31T01:11:23+02:00 - 151.216.181.207 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.66sec (5.66Mbit/s)
-2015-03-31T01:11:44+02:00 - 151.216.180.14 - Served ex2200.template to client
-2015-03-31T01:12:01+02:00 - 151.216.180.13 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.75sec (5.69Mbit/s)
-2015-03-31T01:12:13+02:00 - 151.216.181.198 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148sec (5.72Mbit/s)
-2015-03-31T01:13:18+02:00 - 151.216.180.16 - Served ex2200.template to client
-2015-03-31T01:14:01+02:00 - 151.216.180.15 - Served ex2200.template to client
-2015-03-31T01:14:10+02:00 - 151.216.180.14 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.18sec (5.83Mbit/s)
-2015-03-31T01:15:45+02:00 - 151.216.180.16 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.28sec (5.75Mbit/s)
-2015-03-31T01:16:21+02:00 - 151.216.181.204 - Served ex2200.template to client
-2015-03-31T01:16:31+02:00 - 151.216.180.15 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.15sec (5.67Mbit/s)
-2015-03-31T01:17:00+02:00 - 151.216.181.202 - Served ex2200.template to client
-2015-03-31T01:17:43+02:00 - 151.216.180.137 - Served ex2200.template to client
-2015-03-31T01:18:51+02:00 - 151.216.181.204 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.42sec (5.66Mbit/s)
-2015-03-31T01:19:27+02:00 - 151.216.181.202 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.3sec (5.79Mbit/s)
-2015-03-31T01:20:15+02:00 - 151.216.180.137 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.68sec (5.62Mbit/s)
-2015-03-31T01:21:18+02:00 - 151.216.181.205 - Served ex2200.template to client
-2015-03-31T01:23:46+02:00 - 151.216.181.205 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.87sec (5.72Mbit/s)
-2015-03-31T01:26:10+02:00 - 151.216.181.200 - Served ex2200.template to client
-2015-03-31T01:26:21+02:00 - 151.216.181.203 - Served ex2200.template to client
-2015-03-31T01:28:36+02:00 - 151.216.181.200 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.96sec (5.84Mbit/s)
-2015-03-31T01:28:48+02:00 - 151.216.181.203 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.27sec (5.79Mbit/s)
-2015-03-31T01:29:49+02:00 - 151.216.181.201 - Served ex2200.template to client
-2015-03-31T01:32:16+02:00 - 151.216.181.201 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.52sec (5.78Mbit/s)
-2015-03-31T01:49:49+02:00 - 151.216.183.162 - Served ex2200.template to client
-2015-03-31T01:53:04+02:00 - 151.216.183.162 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 194.4sec (4.35Mbit/s)
-2015-03-31T02:20:51+02:00 - 151.216.181.79 - Served ex2200.template to client
-2015-03-31T02:23:17+02:00 - 151.216.181.79 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.05sec (5.8Mbit/s)
-2015-03-31T02:27:20+02:00 - 151.216.181.69 - Served ex2200.template to client
-2015-03-31T02:29:47+02:00 - 151.216.181.69 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.43sec (5.78Mbit/s)
-2015-03-31T03:18:42+02:00 - 151.216.180.77 - Served ex2200.template to client
-2015-03-31T03:21:08+02:00 - 151.216.180.77 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.66sec (5.81Mbit/s)
-2015-03-31T09:50:51+02:00 - 151.216.180.68 - Served ex2200.template to client
-2015-03-31T09:53:21+02:00 - 151.216.180.68 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 149.43sec (5.66Mbit/s)
-2015-03-31T09:57:30+02:00 - 151.216.180.78 - Served ex2200.template to client
-2015-03-31T10:00:07+02:00 - 151.216.180.78 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 155.88sec (5.43Mbit/s)
-2015-03-31T10:46:03+02:00 - 151.216.180.72 - Served ex2200.template to client
-2015-03-31T10:48:30+02:00 - 151.216.180.72 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.27sec (5.79Mbit/s)
-2015-03-31T11:48:49+02:00 - 151.216.180.6 - Served ex2200.template to client
-2015-03-31T11:54:49+02:00 - 151.216.180.7 - Served ex2200.template to client
-2015-03-31T11:57:18+02:00 - 151.216.180.7 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 147.99sec (5.72Mbit/s)
-2015-03-31T11:58:09+02:00 - 151.216.254.219 - Transferred "rs1.backstage.conf" in 0sec (662.42Mbit/s)
-2015-03-31T11:59:31+02:00 - 151.216.254.20 - Transferred "rs1.backstage.conf" in 0sec (672.62Mbit/s)
-2015-03-31T12:00:56+02:00 - 151.216.254.20 - Transferred "rs1.backstage.conf" in 0sec (672.62Mbit/s)
-2015-03-31T12:19:33+02:00 - 151.216.180.6 - Served ex2200.template to client
-2015-03-31T12:22:03+02:00 - 151.216.180.6 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 148.91sec (5.68Mbit/s)
-2015-03-31T13:30:34+02:00 - 151.216.254.32 - Transferred "rs1.north.conf" in 0sec (306.91Mbit/s)
-2015-03-31T13:39:00+02:00 - 151.216.254.25 - Transferred "rs1.north.conf" in 0sec (352.28Mbit/s)
-2015-03-31T13:41:32+02:00 - 151.216.128.18 - Transferred "rs1.north.conf" in 0sec (311.63Mbit/s)
-2015-03-31T13:43:14+02:00 - 151.216.128.18 - Transferred "rs1.north.conf" in 0sec (344.78Mbit/s)
-2015-03-31T13:44:09+02:00 - 151.216.128.18 - Transferred "rs1.north.conf" in 0sec (363.34Mbit/s)
-2015-03-31T13:44:56+02:00 - 151.216.128.18 - Transferred "rs1.north.conf" in 0sec (344.78Mbit/s)
-2015-03-31T13:46:24+02:00 - 151.216.128.18 - Transferred "rs1.north.conf" in 0sec (241.86Mbit/s)
-2015-03-31T13:48:13+02:00 - 151.216.254.32 - Transferred "rs1.gamehq.conf" in 0sec (483.52Mbit/s)
-2015-03-31T13:49:29+02:00 - 151.216.254.20 - Transferred "rs1.gamehq.conf" in 0sec (586.51Mbit/s)
-2015-03-31T13:52:15+02:00 - 151.216.128.16 - Transferred "rs1.gamehq.conf" in 0sec (570.05Mbit/s)
-2015-03-31T14:23:11+02:00 - 151.216.181.136 - Served ex2200.template to client
-2015-03-31T14:23:13+02:00 - 151.216.181.137 - Served ex2200.template to client
-2015-03-31T14:26:11+02:00 - 151.216.180.70 - Served ex2200.template to client
-2015-03-31T14:26:24+02:00 - 151.216.181.136 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 191.49sec (4.42Mbit/s)
-2015-03-31T14:26:25+02:00 - 151.216.181.137 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 191.46sec (4.42Mbit/s)
-2015-03-31T14:27:46+02:00 - 151.216.180.8 - Served ex2200.template to client
-2015-03-31T14:29:25+02:00 - 151.216.180.70 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 194.18sec (4.36Mbit/s)
-2015-03-31T14:31:06+02:00 - 151.216.180.8 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 198.88sec (4.26Mbit/s)
-2015-03-31T15:50:15+02:00 - 151.216.254.200 - Transferred "rs1.gamehq.conf" in 0sec (483.52Mbit/s)
-2015-03-31T15:50:43+02:00 - 151.216.254.200 - 404 - File not found
-2015-03-31T15:50:51+02:00 - 151.216.254.200 - 404 - File not found
-2015-03-31T15:51:01+02:00 - 151.216.254.200 - 404 - File not found
-2015-03-31T15:51:11+02:00 - 150.70.97.119 - Transferred "rs1.gamehq.conf" in 0sec (606.21Mbit/s)
-2015-03-31T15:51:18+02:00 - 151.216.254.200 - Served ex2200.template to client
-2015-03-31T15:51:23+02:00 - 151.216.254.200 - Served ex2200.template to client
-2015-03-31T15:52:44+02:00 - 150.70.97.124 - Served ex2200.template to client
-2015-03-31T15:53:16+02:00 - 150.70.97.97 - Served ex2200.template to client
-2015-03-31T16:33:45+02:00 - 151.216.128.31 - Transferred "distro6_creativia.conf" in 0sec (998.52Mbit/s)
-2015-03-31T16:48:02+02:00 - 151.216.181.148 - Served ex2200.template to client
-2015-03-31T16:50:27+02:00 - 151.216.181.148 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.42sec (5.86Mbit/s)
-2015-03-31T16:53:43+02:00 - 151.216.181.150 - Served ex2200.template to client
-2015-03-31T16:55:11+02:00 - 151.216.181.153 - Served ex2200.template to client
-2015-03-31T16:56:11+02:00 - 151.216.181.150 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.64sec (5.77Mbit/s)
-2015-03-31T16:56:23+02:00 - 151.216.181.155 - Served ex2200.template to client
-2015-03-31T16:56:44+02:00 - 151.216.181.151 - Served ex2200.template to client
-2015-03-31T16:57:31+02:00 - 151.216.181.152 - Served ex2200.template to client
-2015-03-31T16:57:38+02:00 - 151.216.181.153 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.13sec (5.79Mbit/s)
-2015-03-31T16:58:50+02:00 - 151.216.181.155 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.4sec (5.78Mbit/s)
-2015-03-31T16:59:10+02:00 - 151.216.181.151 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.66sec (5.81Mbit/s)
-2015-03-31T16:59:57+02:00 - 151.216.181.152 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 145.33sec (5.82Mbit/s)
-2015-03-31T17:22:57+02:00 - 151.216.128.11 - 404 - File not found
-2015-03-31T17:25:46+02:00 - 151.216.128.11 - 404 - File not found
-2015-03-31T17:26:22+02:00 - 151.216.254.219 - 404 - File not found
-2015-03-31T17:27:30+02:00 - 151.216.128.11 - Transferred "rs1.south.conf" in 0sec (321.52Mbit/s)
-2015-03-31T17:54:05+02:00 - 151.216.180.66 - Served ex2200.template to client
-2015-03-31T17:57:10+02:00 - 151.216.180.66 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 184.02sec (4.6Mbit/s)
-2015-03-31T17:59:53+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-31T18:13:33+02:00 - 151.216.254.237 - Transferred "rs1.gamehq.conf" in 0sec (560.22Mbit/s)
-2015-03-31T18:13:37+02:00 - 151.216.254.237 - 404 - File not found
-2015-03-31T18:13:44+02:00 - 151.216.254.237 - 404 - File not found
-2015-03-31T18:13:54+02:00 - 151.216.254.237 - 404 - File not found
-2015-03-31T18:14:06+02:00 - 151.216.254.237 - 404 - File not found
-2015-03-31T18:14:10+02:00 - 151.216.254.237 - 404 - File not found
-2015-03-31T18:24:06+02:00 - 176.11.7.229 - Served ex2200.template to client
-2015-03-31T18:25:19+02:00 - 151.216.181.154 - Served ex2200.template to client
-2015-03-31T18:27:45+02:00 - 151.216.181.154 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 146.34sec (5.78Mbit/s)
-2015-03-31T18:27:50+02:00 - 151.216.181.149 - Served ex2200.template to client
-2015-03-31T18:30:55+02:00 - 151.216.181.149 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 183.5sec (4.61Mbit/s)
-2015-03-31T18:43:33+02:00 - 151.216.229.12 - 404 - File not found
-2015-03-31T18:43:41+02:00 - 151.216.229.12 - Served ex2200.template to client
-2015-03-31T20:17:12+02:00 - 151.216.181.148 - Served ex2200.template to client
-2015-03-31T20:19:09+02:00 - 151.216.181.148 - Served ex2200.template to client
-2015-03-31T20:45:47+02:00 - 151.216.183.98 - Served ex2200.template to client
-2015-03-31T20:48:18+02:00 - 151.216.183.98 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 150.84sec (5.61Mbit/s)
-2015-03-31T22:10:24+02:00 - 151.216.254.20 - Hostname not found in DB
-2015-03-31T22:10:31+02:00 - 151.216.254.20 - Hostname not found in DB
-2015-03-31T22:12:27+02:00 - 151.216.254.20 - Hostname not found in DB
-2015-03-31T22:12:36+02:00 - 151.216.254.20 - Hostname not found in DB
-2015-03-31T22:13:06+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-31T22:13:21+02:00 - 151.216.254.32 - Hostname not found in DB
-2015-03-31T22:13:35+02:00 - 151.216.254.32 - Transferred "rs1.north_sw1-infodesk.conf" in 0sec (329.03Mbit/s)
-2015-03-31T22:13:55+02:00 - 151.216.254.20 - Transferred "rs1.north_sw1-infodesk.conf" in 0sec (461.02Mbit/s)
-2015-03-31T22:14:33+02:00 - 151.216.254.20 - Hostname not found in DB
-2015-03-31T22:37:45+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-03-31T22:38:05+02:00 - 151.216.254.20 - Served ex2200.template to client
-2015-03-31T22:39:04+02:00 - 151.216.254.200 - Hostname not found in DB
-2015-03-31T22:39:12+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-03-31T22:40:22+02:00 - 150.70.97.113 - Served ex2200_secure.template to client
-2015-03-31T22:40:28+02:00 - 150.70.97.114 - Hostname not found in DB
-2015-03-31T22:50:27+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-03-31T22:52:37+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-03-31T22:53:48+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-03-31T23:01:27+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-03-31T23:02:16+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-03-31T23:04:51+02:00 - 151.216.181.196 - Hostname not found in DB
-2015-03-31T23:32:54+02:00 - 151.216.181.198 - Served ex2200_secure.template to client
-2015-03-31T23:41:24+02:00 - 151.216.181.198 - Served ex2200_secure.template to client
-2015-04-01T00:20:21+02:00 - 151.216.180.2 - Served ex2200_secure.template to client
-2015-04-01T00:21:28+02:00 - 151.216.180.3 - Served ex2200_secure.template to client
-2015-04-01T02:10:33+02:00 - 151.216.183.229 - Served ex2200.template to client
-2015-04-01T02:13:26+02:00 - 151.216.183.229 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 172.98sec (4.89Mbit/s)
-2015-04-01T02:37:02+02:00 - 151.216.183.230 - Served ex2200.template to client
-2015-04-01T02:38:52+02:00 - 151.216.183.231 - Served ex2200.template to client
-2015-04-01T02:39:58+02:00 - 151.216.183.230 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 175.76sec (4.82Mbit/s)
-2015-04-01T02:41:26+02:00 - 151.216.183.231 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 153.39sec (5.52Mbit/s)
-2015-04-01T03:08:24+02:00 - 151.216.180.69 - Served ex2200_secure.template to client
-2015-04-01T03:08:30+02:00 - 151.216.180.70 - Served ex2200_secure.template to client
-2015-04-01T03:08:30+02:00 - 151.216.180.71 - Served ex2200_secure.template to client
-2015-04-01T03:08:30+02:00 - 151.216.180.11 - Served ex2200_secure.template to client
-2015-04-01T03:08:31+02:00 - 151.216.180.12 - Served ex2200_secure.template to client
-2015-04-01T03:08:31+02:00 - 151.216.180.2 - Served ex2200_secure.template to client
-2015-04-01T03:08:31+02:00 - 151.216.180.72 - Served ex2200_secure.template to client
-2015-04-01T03:08:33+02:00 - 151.216.180.13 - Served ex2200_secure.template to client
-2015-04-01T03:08:33+02:00 - 151.216.180.14 - Served ex2200_secure.template to client
-2015-04-01T03:09:13+02:00 - 151.216.180.73 - Served ex2200_secure.template to client
-2015-04-01T03:09:15+02:00 - 151.216.180.15 - Served ex2200_secure.template to client
-2015-04-01T03:09:15+02:00 - 151.216.180.74 - Served ex2200_secure.template to client
-2015-04-01T03:09:16+02:00 - 151.216.180.16 - Served ex2200_secure.template to client
-2015-04-01T03:09:16+02:00 - 151.216.180.76 - Served ex2200_secure.template to client
-2015-04-01T03:09:16+02:00 - 151.216.180.75 - Served ex2200_secure.template to client
-2015-04-01T03:09:18+02:00 - 151.216.180.130 - Served ex2200_secure.template to client
-2015-04-01T03:09:18+02:00 - 151.216.180.77 - Served ex2200_secure.template to client
-2015-04-01T03:09:18+02:00 - 151.216.180.131 - Served ex2200_secure.template to client
-2015-04-01T03:09:59+02:00 - 151.216.180.78 - Served ex2200_secure.template to client
-2015-04-01T03:10:00+02:00 - 151.216.180.132 - Served ex2200_secure.template to client
-2015-04-01T03:10:00+02:00 - 151.216.180.133 - Served ex2200_secure.template to client
-2015-04-01T03:10:01+02:00 - 151.216.180.79 - Served ex2200_secure.template to client
-2015-04-01T03:10:02+02:00 - 151.216.180.80 - Served ex2200_secure.template to client
-2015-04-01T03:10:03+02:00 - 151.216.180.134 - Served ex2200_secure.template to client
-2015-04-01T03:10:03+02:00 - 151.216.180.135 - Served ex2200_secure.template to client
-2015-04-01T03:10:03+02:00 - 151.216.180.81 - Served ex2200_secure.template to client
-2015-04-01T03:10:05+02:00 - 151.216.180.82 - Served ex2200_secure.template to client
-2015-04-01T03:10:36+02:00 - 151.216.180.136 - Served ex2200_secure.template to client
-2015-04-01T03:10:40+02:00 - 151.216.180.137 - Served ex2200_secure.template to client
-2015-04-01T03:10:44+02:00 - 151.216.180.83 - Served ex2200_secure.template to client
-2015-04-01T03:10:44+02:00 - 151.216.180.84 - Served ex2200_secure.template to client
-2015-04-01T03:10:45+02:00 - 151.216.180.139 - Served ex2200_secure.template to client
-2015-04-01T03:10:45+02:00 - 151.216.180.138 - Served ex2200_secure.template to client
-2015-04-01T03:10:46+02:00 - 151.216.180.85 - Served ex2200_secure.template to client
-2015-04-01T03:10:47+02:00 - 151.216.180.86 - Served ex2200_secure.template to client
-2015-04-01T03:10:49+02:00 - 151.216.180.140 - Served ex2200_secure.template to client
-2015-04-01T03:10:50+02:00 - 151.216.180.194 - Served ex2200_secure.template to client
-2015-04-01T03:10:51+02:00 - 151.216.180.141 - Served ex2200_secure.template to client
-2015-04-01T03:10:51+02:00 - 151.216.180.195 - Served ex2200_secure.template to client
-2015-04-01T03:10:52+02:00 - 151.216.180.196 - Served ex2200_secure.template to client
-2015-04-01T03:10:54+02:00 - 151.216.180.197 - Served ex2200_secure.template to client
-2015-04-01T03:10:57+02:00 - 151.216.180.3 - Served ex2200_secure.template to client
-2015-04-01T03:11:23+02:00 - 151.216.180.198 - Served ex2200_secure.template to client
-2015-04-01T03:11:25+02:00 - 151.216.180.199 - Served ex2200_secure.template to client
-2015-04-01T03:11:30+02:00 - 151.216.180.4 - Served ex2200_secure.template to client
-2015-04-01T03:11:30+02:00 - 151.216.180.200 - Served ex2200_secure.template to client
-2015-04-01T03:11:31+02:00 - 151.216.180.201 - Served ex2200_secure.template to client
-2015-04-01T03:11:31+02:00 - 151.216.180.202 - Served ex2200_secure.template to client
-2015-04-01T03:11:32+02:00 - 151.216.180.203 - Served ex2200_secure.template to client
-2015-04-01T03:11:32+02:00 - 151.216.180.204 - Served ex2200_secure.template to client
-2015-04-01T03:11:33+02:00 - 151.216.180.205 - Served ex2200_secure.template to client
-2015-04-01T03:11:34+02:00 - 151.216.180.207 - Served ex2200_secure.template to client
-2015-04-01T03:11:34+02:00 - 151.216.180.206 - Served ex2200_secure.template to client
-2015-04-01T03:11:37+02:00 - 151.216.180.208 - Served ex2200_secure.template to client
-2015-04-01T03:11:37+02:00 - 151.216.180.209 - Served ex2200_secure.template to client
-2015-04-01T03:11:39+02:00 - 151.216.181.2 - Served ex2200_secure.template to client
-2015-04-01T03:11:41+02:00 - 151.216.181.3 - Served ex2200_secure.template to client
-2015-04-01T03:12:08+02:00 - 151.216.181.66 - Served ex2200_secure.template to client
-2015-04-01T03:12:11+02:00 - 151.216.181.67 - Served ex2200_secure.template to client
-2015-04-01T03:12:16+02:00 - 151.216.181.4 - Served ex2200_secure.template to client
-2015-04-01T03:12:18+02:00 - 151.216.181.5 - Served ex2200_secure.template to client
-2015-04-01T03:12:19+02:00 - 151.216.181.69 - Served ex2200_secure.template to client
-2015-04-01T03:12:19+02:00 - 151.216.181.68 - Served ex2200_secure.template to client
-2015-04-01T03:12:19+02:00 - 151.216.181.7 - Served ex2200_secure.template to client
-2015-04-01T03:12:20+02:00 - 151.216.181.6 - Served ex2200_secure.template to client
-2015-04-01T03:12:21+02:00 - 151.216.180.66 - Served ex2200_secure.template to client
-2015-04-01T03:12:21+02:00 - 151.216.181.71 - Served ex2200_secure.template to client
-2015-04-01T03:12:21+02:00 - 151.216.181.70 - Served ex2200_secure.template to client
-2015-04-01T03:12:24+02:00 - 151.216.180.5 - Served ex2200_secure.template to client
-2015-04-01T03:12:25+02:00 - 151.216.180.6 - Served ex2200_secure.template to client
-2015-04-01T03:12:26+02:00 - 151.216.180.67 - Served ex2200_secure.template to client
-2015-04-01T03:12:29+02:00 - 151.216.180.7 - Served ex2200_secure.template to client
-2015-04-01T03:12:53+02:00 - 151.216.180.8 - Served ex2200_secure.template to client
-2015-04-01T03:12:54+02:00 - 151.216.180.68 - Served ex2200_secure.template to client
-2015-04-01T03:13:02+02:00 - 151.216.180.9 - Served ex2200_secure.template to client
-2015-04-01T03:13:03+02:00 - 151.216.180.10 - Served ex2200_secure.template to client
-2015-04-01T03:44:54+02:00 - 151.216.181.19 - Served ex2200_secure.template to client
-2015-04-01T03:44:54+02:00 - 151.216.181.18 - Served ex2200_secure.template to client
-2015-04-01T03:44:55+02:00 - 151.216.181.82 - Served ex2200_secure.template to client
-2015-04-01T03:44:56+02:00 - 151.216.181.83 - Served ex2200_secure.template to client
-2015-04-01T03:44:57+02:00 - 151.216.181.194 - Served ex2200_secure.template to client
-2015-04-01T03:44:58+02:00 - 151.216.181.195 - Served ex2200_secure.template to client
-2015-04-01T03:44:59+02:00 - 151.216.181.196 - Served ex2200_secure.template to client
-2015-04-01T03:45:00+02:00 - 151.216.181.197 - Served ex2200_secure.template to client
-2015-04-01T03:45:00+02:00 - 151.216.181.132 - Served ex2200_secure.template to client
-2015-04-01T03:45:01+02:00 - 151.216.181.131 - Served ex2200_secure.template to client
-2015-04-01T03:45:01+02:00 - 151.216.181.133 - Served ex2200_secure.template to client
-2015-04-01T03:45:01+02:00 - 151.216.181.130 - Served ex2200_secure.template to client
-2015-04-01T03:45:01+02:00 - 151.216.181.199 - Served ex2200_secure.template to client
-2015-04-01T03:45:01+02:00 - 151.216.181.198 - Served ex2200_secure.template to client
-2015-04-01T03:45:02+02:00 - 151.216.181.135 - Served ex2200_secure.template to client
-2015-04-01T03:45:02+02:00 - 151.216.181.134 - Served ex2200_secure.template to client
-2015-04-01T03:45:38+02:00 - 151.216.181.200 - Served ex2200_secure.template to client
-2015-04-01T03:45:39+02:00 - 151.216.181.201 - Served ex2200_secure.template to client
-2015-04-01T03:45:40+02:00 - 151.216.181.136 - Served ex2200_secure.template to client
-2015-04-01T03:45:41+02:00 - 151.216.181.137 - Served ex2200_secure.template to client
-2015-04-01T03:45:42+02:00 - 151.216.181.202 - Served ex2200_secure.template to client
-2015-04-01T03:45:43+02:00 - 151.216.181.203 - Served ex2200_secure.template to client
-2015-04-01T03:45:44+02:00 - 151.216.181.138 - Served ex2200_secure.template to client
-2015-04-01T03:45:45+02:00 - 151.216.181.204 - Served ex2200_secure.template to client
-2015-04-01T03:45:45+02:00 - 151.216.181.139 - Served ex2200_secure.template to client
-2015-04-01T03:45:45+02:00 - 151.216.181.205 - Served ex2200_secure.template to client
-2015-04-01T03:45:46+02:00 - 151.216.181.206 - Served ex2200_secure.template to client
-2015-04-01T03:45:46+02:00 - 151.216.181.141 - Served ex2200_secure.template to client
-2015-04-01T03:45:48+02:00 - 151.216.181.143 - Served ex2200_secure.template to client
-2015-04-01T03:45:49+02:00 - 151.216.181.140 - Served ex2200_secure.template to client
-2015-04-01T03:45:49+02:00 - 151.216.181.207 - Served ex2200_secure.template to client
-2015-04-01T03:45:50+02:00 - 151.216.181.142 - Served ex2200_secure.template to client
-2015-04-01T03:46:24+02:00 - 151.216.181.208 - Served ex2200_secure.template to client
-2015-04-01T03:46:26+02:00 - 151.216.181.209 - Served ex2200_secure.template to client
-2015-04-01T03:46:27+02:00 - 151.216.181.144 - Served ex2200_secure.template to client
-2015-04-01T03:46:28+02:00 - 151.216.181.145 - Served ex2200_secure.template to client
-2015-04-01T03:46:29+02:00 - 151.216.181.211 - Served ex2200_secure.template to client
-2015-04-01T03:46:29+02:00 - 151.216.181.210 - Served ex2200_secure.template to client
-2015-04-01T03:46:30+02:00 - 151.216.181.146 - Served ex2200_secure.template to client
-2015-04-01T03:46:30+02:00 - 151.216.181.147 - Served ex2200_secure.template to client
-2015-04-01T03:46:30+02:00 - 151.216.181.212 - Served ex2200_secure.template to client
-2015-04-01T03:46:31+02:00 - 151.216.181.213 - Served ex2200_secure.template to client
-2015-04-01T03:46:32+02:00 - 151.216.181.214 - Served ex2200_secure.template to client
-2015-04-01T03:46:32+02:00 - 151.216.181.215 - Served ex2200_secure.template to client
-2015-04-01T03:48:21+02:00 - 151.216.180.137 - Served ex2200_secure.template to client
-2015-04-01T03:52:38+02:00 - 151.216.180.8 - Served ex2200_secure.template to client
-2015-04-01T03:53:13+02:00 - 151.216.181.8 - Served ex2200_secure.template to client
-2015-04-01T03:53:13+02:00 - 151.216.181.9 - Served ex2200_secure.template to client
-2015-04-01T03:53:13+02:00 - 151.216.181.73 - Served ex2200_secure.template to client
-2015-04-01T03:53:14+02:00 - 151.216.181.10 - Served ex2200_secure.template to client
-2015-04-01T03:53:14+02:00 - 151.216.181.72 - Served ex2200_secure.template to client
-2015-04-01T03:53:14+02:00 - 151.216.181.11 - Served ex2200_secure.template to client
-2015-04-01T03:53:17+02:00 - 151.216.181.12 - Served ex2200_secure.template to client
-2015-04-01T03:53:18+02:00 - 151.216.181.74 - Served ex2200_secure.template to client
-2015-04-01T03:53:18+02:00 - 151.216.181.13 - Served ex2200_secure.template to client
-2015-04-01T03:53:18+02:00 - 151.216.181.75 - Served ex2200_secure.template to client
-2015-04-01T03:53:19+02:00 - 151.216.181.14 - Served ex2200_secure.template to client
-2015-04-01T03:53:20+02:00 - 151.216.181.79 - Served ex2200_secure.template to client
-2015-04-01T03:53:20+02:00 - 151.216.181.78 - Served ex2200_secure.template to client
-2015-04-01T03:53:22+02:00 - 151.216.181.76 - Served ex2200_secure.template to client
-2015-04-01T03:53:22+02:00 - 151.216.181.77 - Served ex2200_secure.template to client
-2015-04-01T03:53:23+02:00 - 151.216.181.15 - Served ex2200_secure.template to client
-2015-04-01T03:53:57+02:00 - 151.216.181.17 - Served ex2200_secure.template to client
-2015-04-01T03:53:57+02:00 - 151.216.181.16 - Served ex2200_secure.template to client
-2015-04-01T03:53:59+02:00 - 151.216.181.80 - Served ex2200_secure.template to client
-2015-04-01T03:54:01+02:00 - 151.216.181.81 - Served ex2200_secure.template to client
-2015-04-01T03:56:05+02:00 - 151.216.180.70 - Served ex2200_secure.template to client
-2015-04-01T04:27:22+02:00 - 151.216.254.200 - Hostname not found in DB
-2015-04-01T04:27:26+02:00 - 151.216.181.149 - Served ex2200_secure.template to client
-2015-04-01T04:27:27+02:00 - 151.216.181.148 - Served ex2200_secure.template to client
-2015-04-01T04:27:28+02:00 - 151.216.181.150 - Served ex2200_secure.template to client
-2015-04-01T04:27:31+02:00 - 151.216.181.151 - Served ex2200_secure.template to client
-2015-04-01T04:27:32+02:00 - 151.216.181.152 - Served ex2200_secure.template to client
-2015-04-01T04:27:32+02:00 - 151.216.181.153 - Served ex2200_secure.template to client
-2015-04-01T04:27:32+02:00 - 151.216.181.154 - Served ex2200_secure.template to client
-2015-04-01T04:27:34+02:00 - 151.216.181.155 - Served ex2200_secure.template to client
-2015-04-01T04:27:40+02:00 - 151.216.254.200 - Hostname not found in DB
-2015-04-01T04:27:48+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-04-01T04:27:53+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-04-01T04:27:56+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-04-01T04:28:09+02:00 - 151.216.254.200 - Served ex2200_secure.template to client
-2015-04-01T04:28:13+02:00 - 150.70.97.121 - Hostname not found in DB
-2015-04-01T04:28:18+02:00 - 150.70.97.97 - Hostname not found in DB
-2015-04-01T04:29:08+02:00 - 150.70.97.114 - Served ex2200_secure.template to client
-2015-04-01T04:29:09+02:00 - 150.70.97.126 - Served ex2200_secure.template to client
-2015-04-01T04:29:31+02:00 - 150.70.173.47 - Served ex2200_secure.template to client
-2015-04-01T04:33:34+02:00 - 151.216.181.137 - Served ex2200_secure.template to client
-2015-04-01T04:40:24+02:00 - 151.216.181.136 - Served ex2200_secure.template to client
-2015-04-01T05:53:42+02:00 - 151.216.254.32 - Transferred "rs1.crew.conf" in 0sec (497.33Mbit/s)
-2015-04-01T05:54:24+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-04-01T05:54:34+02:00 - 151.216.254.32 - Transferred "rs1.crew.conf" in 0sec (563.5Mbit/s)
-2015-04-01T05:55:21+02:00 - 151.216.254.241 - Transferred "rs1.crew.conf" in 0sec (493.59Mbit/s)
-2015-04-01T05:56:18+02:00 - 151.216.128.27 - Transferred "rs1.crew.conf" in 0sec (534.81Mbit/s)
-2015-04-01T06:02:23+02:00 - 151.216.128.27 - Transferred "rs1.crew.conf" in 0sec (530.49Mbit/s)
-2015-04-01T06:42:02+02:00 - 151.216.254.241 - Transferred "rs1.crew.conf" in 0sec (426.29Mbit/s)
-2015-04-01T07:12:49+02:00 - 213.188.19.15 - Served ex2200.template to client
-2015-04-01T07:14:47+02:00 - 151.216.183.229 - Served ex2200_secure.template to client
-2015-04-01T07:31:09+02:00 - 151.216.183.66 - Served ex2200.template to client
-2015-04-01T07:49:17+02:00 - 151.216.183.67 - Served ex2200.template to client
-2015-04-01T07:51:49+02:00 - 151.216.183.67 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 151.28sec (5.6Mbit/s)
-2015-04-01T07:51:55+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-04-01T08:26:56+02:00 - 151.216.254.32 - Served ex2200_secure.template to client
-2015-04-01T08:32:16+02:00 - 151.216.254.32 - Served ex2200_secure.template to client
-2015-04-01T08:32:28+02:00 - 151.216.254.32 - Served ex2200.template to client
-2015-04-01T08:34:46+02:00 - 151.216.254.23 - Served ex2200_secure.template to client
-2015-04-01T08:37:39+02:00 - 151.216.213.24 - Served ex2200_secure.template to client
-2015-04-01T08:50:37+02:00 - 151.216.254.241 - Served ex2200_secure.template to client
-2015-04-01T08:51:46+02:00 - 151.216.254.241 - Served ex2200_secure.template to client
-2015-04-01T08:51:53+02:00 - 151.216.254.241 - Served ex2200_secure.template to client
-2015-04-01T09:10:35+02:00 - 151.216.254.241 - Served ex2200_secure.template to client
-2015-04-01T09:11:30+02:00 - 151.216.254.23 - Served ex2200_secure.template to client
-2015-04-01T09:11:55+02:00 - 151.216.254.23 - Served ex2200_secure.template to client
-2015-04-01T09:12:59+02:00 - 151.216.213.24 - Served ex2200_secure.template to client
-2015-04-01T09:13:10+02:00 - 151.216.213.24 - Served ex2200_secure.template to client
-2015-04-01T09:19:46+02:00 - 151.216.213.24 - Served ex2200_secure.template to client
-2015-04-01T10:03:23+02:00 - 151.216.183.68 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 158.86sec (5.33Mbit/s)
-2015-04-01T10:59:24+02:00 - 151.216.254.248 - Served ex2200_secure.template to client
-2015-04-01T13:31:06+02:00 - 151.216.254.200 - Served ex2200.template to client
-2015-04-01T13:31:13+02:00 - 151.216.254.200 - Hostname not found in DB
-2015-04-01T13:31:27+02:00 - 151.216.254.200 - Served ex2200.template to client
-2015-04-01T13:32:02+02:00 - 151.216.254.200 - Served ex2200.template to client
-2015-04-01T13:32:14+02:00 - 150.70.97.97 - Served ex2200.template to client
-2015-04-01T13:32:24+02:00 - 150.70.173.55 - Hostname not found in DB
-2015-04-01T13:32:35+02:00 - 150.70.173.57 - Served ex2200.template to client
-2015-04-01T13:33:17+02:00 - 150.70.97.96 - Served ex2200.template to client
-2015-04-02T01:46:16+02:00 - 151.216.224.60 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.58sec (5.85Mbit/s)
-2015-04-02T01:58:22+02:00 - 151.216.224.61 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.82sec (5.84Mbit/s)
-2015-04-02T02:34:33+02:00 - 151.216.224.61 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 144.21sec (5.87Mbit/s)
-2015-04-02T03:13:49+02:00 - 151.216.224.67 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 143.22sec (5.91Mbit/s)
-2015-04-03T06:46:01+02:00 - 151.216.183.7 - Transferred "jinstall-ex-2200-14.1X53-D15.2-domestic-signed.tgz" in 206.37sec (4.1Mbit/s)
diff --git a/fap/proof_of_concepts/distro_during_testing.config b/fap/proof_of_concepts/distro_during_testing.config
deleted file mode 100755
index 1b92507..0000000
--- a/fap/proof_of_concepts/distro_during_testing.config
+++ /dev/null
@@ -1,355 +0,0 @@
-root@distro0gw> show configuration
-## Last commit: 2013-05-03 23:06:23 UTC by root
-version 12.1R6.6;
-system {
- host-name distro0gw;
- root-authentication {
- encrypted-password "$1$SPgmZ0Nq$u2R7lVJJAv1I3paV1Go0z0"; ## SECRET-DATA
- }
- login {
- user tg15 {
- uid 2003;
- class super-user;
- authentication {
- encrypted-password "$1$Mhjp603p$t6F4RTyx8igBGDZ6zj7A3/"; ## SECRET-DATA
- }
- }
- }
- syslog {
- user * {
- any emergency;
- }
- file messages {
- any notice;
- authorization info;
- }
- file interactive-commands {
- interactive-commands any;
- }
- }
-}
-chassis {
- aggregated-devices {
- ethernet {
- device-count 10;
- }
- }
-}
-interfaces {
- ge-0/0/0 {
- description "ae0/access mgmt";
- inactive: ether-options {
- 802.3ad ae0;
- }
- unit 0 {
- family ethernet-switching {
- port-mode access;
- vlan {
- members mgmt;
- }
- }
- }
- }
- ge-0/0/1 {
- description ae0;
- ether-options {
- 802.3ad ae0;
- }
- }
- ge-0/0/2 {
- description ae0;
- ether-options {
- 802.3ad ae0;
- }
- }
- ge-0/0/3 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/4 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/5 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/6 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/7 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/8 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/9 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/10 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/11 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/12 {
- description "RPI dhcp-client test";
- unit 0 {
- family ethernet-switching {
- port-mode access;
- vlan {
- members mgmt;
- }
- }
- }
- }
- ge-0/0/13 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/14 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/15 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/16 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/17 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/18 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/19 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/20 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/21 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/22 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/0/23 {
- unit 0 {
- description "Til laptopen";
- family inet {
- address 10.0.100.1/24;
- }
- }
- }
- ge-0/1/0 {
- unit 0 {
- family ethernet-switching;
- }
- }
- xe-0/1/0 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/1/1 {
- unit 0 {
- family ethernet-switching;
- }
- }
- xe-0/1/1 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/1/2 {
- unit 0 {
- family ethernet-switching;
- }
- }
- xe-0/1/2 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ge-0/1/3 {
- unit 0 {
- family ethernet-switching;
- }
- }
- ae0 {
- description "Aggregation til EX2200";
- aggregated-ether-options {
- minimum-links 2;
- lacp {
- active;
- }
- }
- unit 0 {
- family ethernet-switching {
- port-mode trunk;
- vlan {
- members [ deltagere mgmt ];
- }
- }
- }
- }
- me0 {
- unit 0 {
- family inet;
- }
- }
- vlan {
- unit 200 {
- description "Deltagere L3 interface";
- }
- unit 300 {
- description "Management L3 interface";
- family inet {
- address 10.0.200.1/24;
- }
- }
- }
-}
-forwarding-options {
- helpers {
- bootp {
- interface {
- vlan.200 {
- description "Deltagere DHCP-server";
- server 1.2.3.4;
- }
- vlan.300 {
- description "MGMT + bootstrap";
- server 10.0.100.2;
- dhcp-option82 {
- circuit-id {
- prefix hostname;
- use-interface-description;
- }
- }
- }
- }
- }
- }
-}
-event-options {
- policy ae0down {
- events snmp_trap_link_down;
- attributes-match {
- snmp_trap_link_down.interface-name matches ae0;
- }
- then {
- change-configuration {
- retry count 5 interval 10;
- commands {
- "deactivate interface ge-0/0/0 ether-options";
- "activate interface ge-0/0/0 unit 0";
- }
- user-name tg15;
- commit-options {
- log "deactivating 802.3 from ge-0/0/0 (ae0). Activating access port";
- }
- }
- }
- }
- policy ae0up {
- events snmp_trap_link_up;
- attributes-match {
- snmp_trap_link_up.interface-name matches ae0;
- }
- then {
- change-configuration {
- retry count 5 interval 10;
- commands {
- "deactivate interface ge-0/0/0 unit 0";
- "activate interface ge-0/0/0 ether-options";
- }
- user-name tg15;
- commit-options {
- log "activating 802.3 at ge-0/0/0 (ae0). Deactivating access port";
- }
- }
- }
- }
-}
-protocols {
- igmp-snooping {
- vlan all;
- }
- rstp;
- lldp {
- interface all;
- }
- lldp-med {
- interface all;
- }
-}
-ethernet-switching-options {
- analyzer dump {
- input {
- ingress {
- interface ge-0/0/23.0;
- }
- egress {
- interface ge-0/0/23.0;
- }
- }
- output {
- interface {
- ge-0/0/22.0;
- }
- }
- }
- storm-control {
- interface all;
- }
-}
-vlans {
- deltagere {
- vlan-id 200;
- l3-interface vlan.200;
- }
- mgmt {
- vlan-id 300;
- l3-interface vlan.300;
- }
-}
-poe {
- interface all;
-}
-
diff --git a/fap/proof_of_concepts/tg15-tech82-poc1.tar.gz b/fap/proof_of_concepts/tg15-tech82-poc1.tar.gz
deleted file mode 100755
index 2844b59..0000000
--- a/fap/proof_of_concepts/tg15-tech82-poc1.tar.gz
+++ /dev/null
Binary files differ
diff --git a/fap/tools_temp/get_info.php b/fap/tools_temp/get_info.php
deleted file mode 100644
index 84da5cf..0000000
--- a/fap/tools_temp/get_info.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
- $community = '<sensored>';
-
- /*
- Loopbacks: 151.216.255.0/24
- */
- $ips = array();
- foreach(range(1, 254) as $n){
- $ips[] = '151.216.255.' . $n;
- }
-
- /*
- mgmt nets
- */
- foreach(range(180, 184) as $range){
- foreach(range(2, 254) as $n){ # skips .1, which is the distro
- $ips[] = '151.216.' . $range . '.' . $n;
- }
- }
-
- $n = 1;
- foreach($ips as $ip){
- $hostname = @snmpget($ip, $community, '.1.3.6.1.2.1.1.5.0', 50000);
- if($hostname) {
- $sysdescr = snmpget($ip, $community, '.1.3.6.1.2.1.1.1.0', 50000);
- if(substr($sysdescr, 0, 30) === 'STRING: Juniper Networks, Inc.'){
- $model = explode(' ', substr($sysdescr, 30))[1];
- }else{
- $model = 'unknown_model';
- }
-
- # Sample string: STRING: Juniper Networks, Inc. ex3300-48p Ethernet Switch, kernel JUNOS 14.1X53-D15.2, Build date: 2014-12-21 02:50:15 UTC Copyright (c) 1996-2014 Juniper Networks, Inc.
- preg_match('/[0-9]{2}\.[0-9]{1}X[0-9]{2}-[A-Z]{1}[0-9]{2}\.[0-9]{1}/', $sysdescr, $regex_matches);
-
- if(isset($regex_matches[0])){
- $version = $regex_matches[0];
- }else{
- $version = 'unknown_firmware';
- }
-
-
- # 14.1X53-D15.2
-
- echo substr($hostname, 8) . ' ' . $ip . ' ' . $model . ' ' . $version;
- echo "\n";
- }
- }
-?>
diff --git a/include/FixedSNMP.pm b/include/FixedSNMP.pm
deleted file mode 100644
index 1ea3089..0000000
--- a/include/FixedSNMP.pm
+++ /dev/null
@@ -1,125 +0,0 @@
-# A bugfix to the gettable functions of SNMP.pm, that deals properly
-# with bulk responses being overridden. Original copyright:
-#
-# Copyright (c) 1995-2006 G. S. Marzot. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-# To use, just "use FixedSNMP;" and then use SNMP::Session as usual.
-
-use strict;
-use warnings;
-use SNMP;
-
-package FixedSNMP::Session;
-
-sub _gettable_do_it() {
- my ($this, $vbl, $parse_indexes, $textnode, $state) = @_;
-
- my ($res);
-
- $vbl = $_[$#_] if ($state->{'options'}{'callback'});
-
- my $num_vbls = scalar @$vbl;
- my $num_stopconds = scalar @{$state->{'stopconds'}};
-
- while ($num_vbls > 0 && !$this->{ErrorNum}) {
- my @found_eof = (0) x $num_stopconds;
-
- for (my $i = 0; $i <= $#$vbl; $i++) {
- my $row_oid = SNMP::translateObj($vbl->[$i][0]);
- my $row_text = $vbl->[$i][0];
- my $row_index = $vbl->[$i][1];
- my $row_value = $vbl->[$i][2];
- my $row_type = $vbl->[$i][3];
-
- my $stopcond_num = $i % $num_stopconds;
- my $stopcond = $state->{'stopconds'}[$stopcond_num];
- if ($row_oid !~ /^\Q$stopcond\E/ || $row_value eq 'ENDOFMIBVIEW') {
- $found_eof[$stopcond_num] = 1;
- } else {
-
- if ($row_type eq "OBJECTID") {
-
- # If the value returned is an OID, translate this
- # back in to a textual OID
-
- $row_value = SNMP::translateObj($row_value);
-
- }
-
- # continue past this next time
-
- $state->{'varbinds'}[$stopcond_num] = [ $row_text, $row_index ];
-
- # Place the results in a hash
-
- $state->{'result_hash'}{$row_index}{$row_text} = $row_value;
- }
- }
-
- my @newstopconds = ();
- my @newvarbinds = ();
- for (my $i = 0; $i < $num_stopconds; ++$i) {
- unless ($found_eof[$i]) {
- push @newstopconds, $state->{'stopconds'}[$i];
- push @newvarbinds, $state->{'varbinds'}[$i];
- }
- }
- if ($#newstopconds == -1) {
- last;
- }
- $state->{'varbinds'} = \@newvarbinds;
- $state->{'stopconds'} = \@newstopconds;
- $vbl = $state->{'varbinds'};
- $num_vbls = scalar @newvarbinds;
- $num_stopconds = scalar @newstopconds;
-
- #
- # if we've been configured with a callback, then call the
- # sub-functions with a callback to our own "next" processing
- # function (_gettable_do_it). or else call the blocking method and
- # call the next processing function ourself.
- #
- if ($state->{'options'}{'callback'}) {
- if ($this->{Version} ne '1' && !$state->{'options'}{'nogetbulk'}) {
- $res = $this->getbulk(0, $state->{'repeatcount'}, $vbl,
- [\&_gettable_do_it, $this, $vbl,
- $parse_indexes, $textnode, $state]);
- } else {
- $res = $this->getnext($vbl,
- [\&_gettable_do_it, $this, $vbl,
- $parse_indexes, $textnode, $state]);
- }
- return;
- } else {
- if ($this->{Version} ne '1' && !$state->{'options'}{'nogetbulk'}) {
- $res = $this->getbulk(0, $state->{'repeatcount'}, $vbl);
- } else {
- $res = $this->getnext($vbl);
- }
- }
- }
-
- # finish up
- _gettable_end_routine($state, $parse_indexes, $textnode);
-
- # return the hash if no callback was specified
- if (!$state->{'options'}{'callback'}) {
- return($state->{'result_hash'});
- }
-
- #
- # if they provided a callback, call it
- # (if an array pass the args as well)
- #
- if (ref($state->{'options'}{'callback'}) eq 'ARRAY') {
- my $code = shift @{$state->{'options'}{'callback'}};
- $code->(@{$state->{'options'}{'callback'}}, $state->{'result_hash'});
- } else {
- $state->{'options'}{'callback'}->($state->{'result_hash'});
- }
-}
-
-*FixedSNMP::Session::_gettable_end_routine = *SNMP::Session::_gettable_end_routine;
-*SNMP::Session::_gettable_do_it = *FixedSNMP::Session::_gettable_do_it;
diff --git a/include/config.pm.dist b/include/config.pm.dist
deleted file mode 100755
index cf1362a..0000000
--- a/include/config.pm.dist
+++ /dev/null
@@ -1,136 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use DBI;
-package nms::config;
-
-# DB
-our $db_name = "nms";
-our $db_host = "bb-8.tg16.gathering.org";
-our $db_username = "nms";
-our $db_password = "<removed>"; # TODO: Remove before publishing "goodiebag"
-
-# Gondul
-our $gondul_url = "http://foo.bar"; # TODO: Remove before publishing "goodiebag"
-our $gondul_user = "secret"; # TODO: Remove before publishing "goodiebag"
-our $gondul_pass = "<removed>"; # TODO: Remove before publishing "goodiebag"
-
-# NMS: What SNMP objects to fetch.
-# Some basics
-our @snmp_objects = [
-['ifIndex'],
-['sysName'],
-['sysDescr'],
-['ifHighSpeed'],
-['ifType'],
-['ifName'],
-['ifDescr'],
-['ifAlias'],
-['ifOperStatus'],
-['ifAdminStatus'],
-['ifLastChange'],
-['ifHCInOctets'],
-['ifHCOutOctets'],
-['ifInDiscards'],
-['ifOutDiscards'],
-['ifInErrors'],
-['ifOutErrors'],
-['ifInUnknownProtos'],
-['ifOutQLen'],
-['sysUpTime'],
-['jnxOperatingTemp'],
-['jnxOperatingCPU'],
-['jnxOperatingDescr'],
-['jnxBoxSerialNo']
-];
-# Max SNMP polls to fire off at the same time.
-our $snmp_max = 20;
-
-# DHCP-servers
-our $dhcp_server1 = "185.110.149.2"; # primary
-our $dhcp_server2 = "185.110.148.2"; # secondary
-
-# TACACS-login for NMS
-our $tacacs_user = "<removed>"; # TODO: Remove before publishing "goodiebag"
-our $tacacs_pass = "<removed>"; # TODO: Remove before publishing "goodiebag"
-
-# Telnet-timeout for smanagrun
-our $telnet_timeout = 300;
-
-# IP/IPv6/DNS-info
-our $tgname = "tg16";
-our $pri_hostname = "r2-d2";
-our $pri_v4 = "185.110.149.2";
-our $pri_v6 = "2a06:5841:149a::2";
-our $pri_net_v4 = "185.110.149.0/26";
-our $pri_net_v6 = "2a06:5841:149a::/64";
-
-our $sec_hostname = "c-3po";
-our $sec_v4 = "185.110.148.2";
-our $sec_v6 = "2a06:5841:1337::2";
-our $sec_net_v4 = "185.110.148.0/26";
-our $sec_net_v6 = "2a06:5841:1337::/64";
-
-# for RIPE to get reverse zones via DNS AXFR
-# https://www.ripe.net/data-tools/dns/reverse-dns/how-to-set-up-reverse-delegation
-our $ext_xfer = "193.0.0.0/22; 2001:610:240::/48; 2001:67c:2e8::/48";
-
-# allow XFR from NOC
-our $noc_net = "185.110.150.0/25; 2a06:5841:150a::1/64";
-
-# To generate new dnssec-key for ddns:
-# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST DHCP_UPDATER
-our $ddns_key = "<removed>"; # TODO: Remove before publishing "goodiebag"
-our $ddns_to = "127.0.0.1"; # just use localhost
-
-# Base networks
-our $base_ipv4net = "88.92.0.0/17";
-our $base_ipv6net = "2a06:5840::/29";
-our $ipv6zone = "0.4.8.5.6.0.a.2.ip6.arpa";
-
-# extra networks that are outside the normal ranges
-# that should have recursive DNS access
-our @rec_net = (
- '185.110.148.0/22',
-);
-
-# extra networks that are outside the normal ranges
-# that should be added to DNS
-our @extra_nets = (
- '185.110.148.0/24',
- '185.110.149.0/24',
- '185.110.150.0/24',
- '185.110.151.0/24',
-);
-
-# add WLC's
-our $wlc1_v4 = "185.110.148.14";
-our $wlc1_v6 = "f00d::1";
-
-# add VOIP-server
-our $voip1_v4 = "<removed>"; # TODO: Remove before publishing "goodiebag"
-our $voip1_v6 = "<removed>"; # TODO: Remove before publishing "goodiebag"
-
-# PXE-server (rest of bootstrap assumes $sec_v4/$sec_v6)
-our $pxe_server_v4 = $sec_v4;
-our $pxe_server_v6 = $sec_v6;
-
-# FAP-server (Gondul)
-our $fap_server_v4 = "<removed>"; # TODO: Remove before publishing "goodiebag"
-our $fap_server_v6 = "<removed>"; # TODO: Remove before publishing "goodiebag"
-our @fap_networks = (
- '88.92.54.0/26', # distro0
- '88.92.54.64/26', # distro1
- '88.92.54.128/26', # distro2
- '88.92.54.192/26', # distro3
- '88.92.55.0/26', # distro4
- '88.92.55.64/26', # distro5
- '88.92.55.128/26', # distro6
- '88.92.55.192/26', # distro7
- '88.92.56.0/26', # distro8
- '88.92.56.64/26', # vc1.ring
-);
-
-
-
-1;
diff --git a/include/nms.pm b/include/nms.pm
deleted file mode 100755
index 2ec922b..0000000
--- a/include/nms.pm
+++ /dev/null
@@ -1,186 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use DBI;
-use Net::OpenSSH;
-use Net::Telnet;
-use Data::Dumper;
-use FileHandle;
-use JSON;
-package nms;
-
-use base 'Exporter';
-our @EXPORT = qw(switch_disconnect switch_connect_ssh switch_connect_dlink switch_exec switch_exec_json switch_timeout db_connect);
-
-BEGIN {
- require "config.pm";
- eval {
- require "config.local.pm";
- };
-}
-
-
-sub db_connect {
- my $connstr = "dbi:Pg:dbname=" . $nms::config::db_name;
- $connstr .= ";host=" . $nms::config::db_host unless (!defined($nms::config::db_host));
-
- my $dbh = DBI->connect($connstr,
- $nms::config::db_username,
- $nms::config::db_password, {AutoCommit => 0})
- or die "Couldn't connect to database";
- return $dbh;
-}
-
-sub switch_connect_ssh($) {
- my ($ip) = @_;
- my $ssh = Net::OpenSSH->new($ip,
- user => $nms::config::tacacs_user,
- password => $nms::config::tacacs_pass,
- master_opts => [ "-o", "StrictHostKeyChecking=no" ]);
- my ($pty, $pid) = $ssh->open2pty({stderr_to_stdout => 1})
- or die "unable to start remote shell: " . $ssh->error;
-
- my $dumplog = FileHandle->new;
- $dumplog->open(">>/tmp/dumplog-queue") or die "/tmp/dumplog-queue: $!";
- #$dumplog->print("\n\nConnecting to " . $ip . "\n\n");
-
- my $inputlog = FileHandle->new;
- $inputlog->open(">>/tmp/inputlog-queue") or die "/tmp/inputlog-queue: $!";
- #$inputlog->print("\n\nConnecting to " . $ip . "\n\n");
-
- my $telnet = Net::Telnet->new(-fhopen => $pty,
- -timeout => $nms::config::telnet_timeout,
- -dump_log => $dumplog,
- -input_log => $inputlog,
- -prompt => '/.*\@[a-z0-9-]+[>#] /',
- -telnetmode => 0,
- -cmd_remove_mode => 1,
- -output_record_separator => "\r");
- $telnet->waitfor(-match => $telnet->prompt,
- -errmode => "return")
- or die "login failed: " . $telnet->lastline;
-
- $telnet->cmd("set cli screen-length 0");
-
- return { telnet => $telnet, ssh => $ssh, pid => $pid, pty => $pty };
-}
-
-sub switch_connect_dlink($) {
- my ($ip) = @_;
-
- my $dumplog = FileHandle->new;
- $dumplog->open(">>/tmp/dumplog-queue") or die "/tmp/dumplog-queue: $!";
- $dumplog->print("\n\nConnecting to " . $ip . "\n\n");
-
- my $inputlog = FileHandle->new;
- $inputlog->open(">>/tmp/inputlog-queue") or die "/tmp/inputlog-queue: $!";
- $inputlog->print("\n\nConnecting to " . $ip . "\n\n");
-
- my $conn = new Net::Telnet( Timeout => $nms::config::telnet_timeout,
- Dump_Log => $dumplog,
- Input_Log => $inputlog,
- Errmode => 'return',
- Prompt => '/[\S\-\_]+[#>]/');
- my $ret = $conn->open( Host => $ip);
- if (!$ret || $ret != 1) {
- return (undef);
- }
- # Handle login with and without password
- print "Logging in without password\n";
- $conn->waitfor('/User ?Name:/');
- $conn->print('admin');
- my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/');
- die 'Unexpected prompt after login attempt' if (not defined $match);
- if ($match eq 'Password:') {
- $conn->print('gurbagurba'); # Dette passordet skal feile
- $conn->waitfor('/User ?Name:/');
- $conn->print($nms::config::tacacs_user);
- my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/');
- if ($match eq 'Password:') {
- $conn->cmd($nms::config::tacacs_pass);
- }
- }
- return { telnet => $conn };
-}
-
-# Send a command to switch and return the data recvied from the switch
-sub switch_exec {
- my ($cmd, $conn, $print) = @_;
-
- sleep 1; # don't overload the D-Link
-
- # Send the command and get data from switch
- my @data;
- if (defined($print)) {
- $conn->print($cmd);
- return;
- } else {
- @data = $conn->cmd($cmd);
- print "ERROR: " . $conn->errmsg . "\n" if $conn->errmsg;
- }
- return @data;
-}
-
-sub switch_exec_json($$) {
- my ($cmd, $conn) = @_;
- my @json = switch_exec("$cmd | display json", $conn);
- pop @json; # Remove the banner at the end of the output
- return ::decode_json(join("", @json));
-}
-
-sub switch_timeout {
- my ($timeout, $conn) = @_;
-
- $conn->timeout($timeout);
- return ('Set timeout to ' . $timeout);
-}
-
-sub switch_disconnect($) {
- my ($struct) = @_;
- my $conn = $struct->{telnet};
- $conn->close();
- if ($struct->{pid}) {
- waitpid($struct->{pid}, 0);
- }
-}
-# A few utilities to convert from SNMP binary address format to human-readable.
-
-sub convert_mac {
- return join(':', map { sprintf "%02x", $_ } unpack('C*', shift));
-}
-
-sub convert_ipv4 {
- return join('.', map { sprintf "%d", $_ } unpack('C*', shift));
-}
-
-sub convert_ipv6 {
- return join(':', map { sprintf "%x", $_ } unpack('n*', shift));
-}
-
-sub convert_addr {
- my ($data, $type) = @_;
- if ($type == 1) {
- return convert_ipv4($data);
- } elsif ($type == 2) {
- return convert_ipv6($data);
- } else {
- die "Unknown address type $type";
- }
-}
-
-# Convert raw binary SNMP data to list of bits.
-sub convert_bytelist {
- return split //, unpack("B*", shift);
-}
-
-sub convert_lldp_caps {
- my ($caps_data, $data) = @_;
-
- my @caps = convert_bytelist($caps_data);
- my @caps_names = qw(other repeater bridge ap router telephone docsis stationonly);
- for (my $i = 0; $i < scalar @caps && $i < scalar @caps_names; ++$i) {
- $data->{'cap_enabled_' . $caps_names[$i]} = $caps[$i];
- }
-}
-
-1;
diff --git a/include/nms/snmp.pm b/include/nms/snmp.pm
deleted file mode 100644
index 26ada44..0000000
--- a/include/nms/snmp.pm
+++ /dev/null
@@ -1,91 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use SNMP;
-use nms;
-package nms::snmp;
-
-use base 'Exporter';
-our @EXPORT = qw();
-
-BEGIN {
- # $SNMP::debugging = 1;
-
- # sudo mkdir /usr/share/mibs/site
- # cd /usr/share/mibs/site
- # wget -O- ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz | sudo tar --strip-components=3 -zxvvf -
- SNMP::initMib();
- SNMP::addMibDirs("/srv/tgmanage/mibs/StandardMibs");
- SNMP::addMibDirs("/srv/tgmanage/mibs/JuniperMibs");
-
- SNMP::loadModules('SNMPv2-MIB');
- SNMP::loadModules('ENTITY-MIB');
- SNMP::loadModules('IF-MIB');
- SNMP::loadModules('LLDP-MIB');
- SNMP::loadModules('IP-MIB');
- SNMP::loadModules('IP-FORWARD-MIB');
-}
-
-sub snmp_open_session {
- my ($ip, $community, $async) = @_;
-
- $async //= 0;
-
- my %options = (UseEnums => 1);
- if ($ip =~ /:/) {
- $options{'DestHost'} = "udp6:$ip";
- } else {
- $options{'DestHost'} = "udp:$ip";
- }
-
- if ($community =~ /^snmpv3:(.*)$/) {
- my ($username, $authprotocol, $authpassword, $privprotocol, $privpassword) = split /\//, $1;
-
- $options{'SecName'} = $username;
- $options{'SecLevel'} = 'authNoPriv';
- $options{'AuthProto'} = $authprotocol;
- $options{'AuthPass'} = $authpassword;
-
- if (defined($privprotocol) && defined($privpassword)) {
- $options{'SecLevel'} = 'authPriv';
- $options{'PrivProto'} = $privprotocol;
- $options{'PrivPass'} = $privpassword;
- }
-
- $options{'Version'} = 3;
- } else {
- $options{'Community'} = $community;
- $options{'Version'} = 2;
- }
-
- my $session = SNMP::Session->new(%options);
- if (defined($session) && ($async || defined($session->getnext('sysDescr')))) {
- return $session;
- } else {
- die 'Could not open SNMP session to ' . $ip;
- }
-}
-
-# Not currently in use; kept around for reference.
-sub fetch_multi_snmp {
- my ($session, @oids) = @_;
-
- my %results = ();
-
- # Do bulk reads of 40 and 40; seems to be about the right size for 1500-byte packets.
- for (my $i = 0; $i < scalar @oids; $i += 40) {
- my $end = $i + 39;
- $end = $#oids if ($end > $#oids);
- my @oid_slice = @oids[$i..$end];
-
- my $localresults = $session->get_request(-varbindlist => \@oid_slice);
- return undef if (!defined($localresults));
-
- while (my ($key, $value) = each %$localresults) {
- $results{$key} = $value;
- }
- }
-
- return \%results;
-}
-
diff --git a/include/nms/util.pm b/include/nms/util.pm
deleted file mode 100644
index 64637b8..0000000
--- a/include/nms/util.pm
+++ /dev/null
@@ -1,141 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-package nms::util;
-use Data::Dumper;
-
-use base 'Exporter';
-our @EXPORT = qw(guess_placement parse_switches_txt parse_switches parse_switch);
-
-# Parse a single switches.txt-formatted switch
-sub parse_switch {
- my ($switch, $subnet4, $subnet6, $mgtmt4, $mgtmt6, $lolid, $distro) = split(/ /);
- my %foo = guess_placement($switch);
- my %ret = (
- 'sysname' => "$switch",
- 'subnet4' => "$subnet4",
- 'subnet6' => "$subnet6",
- 'mgmt_v4_addr' => "$mgtmt4",
- 'mgmt_v6_addr' => "$mgtmt6",
- 'traffic_vlan' => "$lolid",
- 'distro' => "$distro"
- );
- %{$ret{'placement'}} = guess_placement($switch);
- return %ret;
-}
-
-# Parses a switches_txt given as a filehandle on $_[0]
-# (e.g.: parse_switches_txt(*STDIN) or parse_switches_txt(whatever).
-sub parse_switches_txt {
- my $fh = $_[0];
- my @switches;
- while(<$fh>) {
- chomp;
- my %switch = parse_switch($_);
- push @switches, {%switch};
- }
- return @switches;
-}
-
-# Parses switches in switches.txt format given as $_[0].
-# E.g: parse_switches("e1-3 88.92.0.0/26 2a06:5840:0a::/64 88.92.54.2/26 2a06:5840:54a::2/64 1013 distro0")
-sub parse_switches {
- my @switches;
- my $txt = $_[0];
- foreach (split("\n",$txt)) {
- chomp;
- my %switch = parse_switch($_);
- push @switches, {%switch};
- }
- return @switches;
-}
-
-# Guesses placement from name to get a starting point
-# Largely courtesy of Knuta
-sub guess_placement {
- my ($x, $y, $xx, $yy);
-
- my $name = $_[0];
- my $src = "unknown";
- if ($name =~ /^e\d+-\d+$/) {
- $name =~ /e(\d+)-(\d+)/;
- my ($e, $s) = ($1, $2);
- $src = "main";
-
- $x = int(292 + (($e-1)/2) * 31.1);
- $y = undef;
-
- $x += 14 if ($e >= 13);
- $x += 14 if ($e >= 25);
- $x += 14 if ($e >= 41);
- $x += 14 if ($e >= 59);
-
- if ($s > 2) {
- $y = 405 - 120 * ($s-2);
- } else {
- $y = 689 - 120 * ($s);
- }
-
- $xx = $x + 16;
- $yy = $y + 120;
-
- # Justeringer
- $y += 45 if $name eq "e1-4";
- $y += 20 if $name eq "e3-4";
- $y += 15 if $name eq "e5-4";
- $yy -= 25 if $name eq "e7-1";
- $y += 10 if $name eq "e5-2";
- $yy -= 25 if $name eq "e5-2";
- $y += 20 if ($e >= 81 and $s == 2);
- $yy -= 20 if ($e >= 79 and $s == 1);
- $yy -= 30 if ($e >= 81 and $s == 1);
-
- } elsif ($name =~ /^creativia(\d+)$/) {
- my ($s) = ($1);
- $src = "creativia";
- $x = 1535;
- $y = int(160 + 32.2 * $s);
- $yy = $y + 20;
- if ($s == 1) {
- $xx = $x + 70;
- } elsif ($s == 2) {
- $xx = $x + 90;
- } elsif ($s == 3) {
- $xx = $x + 102;
- } else {
- $xx = $x + 142;
- }
-
- } elsif ($name =~ /^crew(\d+)-(\d+)$/) {
- my ($s, $n) = ($1, $2);
- $src = "crew";
- $x = 550 + 65 * $n;
- $y = int(759 + 20.5 * $s);
- $xx = $x + 65;
- $yy = $y + 14;
- } elsif ($name =~ /^distro(\d)/) {
- my $d = ($1);
- $src = "distro";
- $x = 292 + $d * 165;
- $y = 415;
- $xx = $x + 130;
- $yy = $y + 20;
- } else {
- # Fallback to have _some_ position
- $src = "random";
- $x = int(rand(500));
- $y = int(rand(500));
- $xx = $x + 20;
- $yy = $y + 130;
- };
-
-
- my %box = (
- 'src' => "$src",
- 'x1' => $x,
- 'y1' => $y,
- 'xx' => $xx,
- 'yy' => $yy
- );
- return %box;
-}
diff --git a/include/nms/web.pm b/include/nms/web.pm
deleted file mode 100755
index 7c9339e..0000000
--- a/include/nms/web.pm
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-use strict;
-use warnings;
-use utf8;
-use DBI;
-use Data::Dumper;
-use JSON;
-use nms;
-use Digest::SHA;
-use FreezeThaw;
-use URI::Escape;
-package nms::web;
-
-use base 'Exporter';
-our %get_params;
-our %json;
-our @EXPORT = qw(finalize_output now json $dbh db_safe_quote %get_params get_input %json);
-our $dbh;
-our $now;
-our $when;
-our %cc;
-
-sub get_input {
- my $in = "";
- while(<STDIN>) { $in .= $_; }
- return $in;
-}
-# Print cache-control from %cc
-sub printcc {
- my $line = "";
- my $first = "";
- foreach my $tmp (keys(%cc)) {
- $line .= $first . $tmp . "=" . $cc{$tmp};
- $first = ", ";
- }
- print 'Cache-Control: ' . $line . "\n";
-}
-
-sub db_safe_quote {
- my $word = $_[0];
- my $term = $get_params{$word};
- if (!defined($term)) {
- if(defined($_[1])) {
- $term = $_[1];
- } else {
- die "Missing CGI param $word";
- }
- }
- return $dbh->quote($term) || die;
-}
-
-# returns a valid $when statement
-# Also sets cache-control headers if time is overridden
-# This can be called explicitly to override the window of time we evaluate.
-# Normally up to 15 minutes old data will be returned, but for some API
-# endpoints it is better to return no data than old data (e.g.: ping).
-sub setwhen {
- $now = "now()";
- my $window = '8m';
- my $offset = '0s';
- if (@_ > 0) {
- $window = $_[0];
- }
- if (@_ > 1) {
- $offset = $_[1];
- }
- if (defined($get_params{'now'})) {
- $now = db_safe_quote('now') . "::timestamp with time zone ";
- $cc{'max-age'} = "3600";
- }
- $now = "(" . $now . " - '" . $offset . "'::interval)";
- $when = " time > " . $now . " - '".$window."'::interval and time < " . $now . " ";
-}
-
-sub finalize_output {
- my $query;
- my $hash = Digest::SHA::sha512_base64(FreezeThaw::freeze(%json));
- $dbh->commit;
- $query = $dbh->prepare('select extract(epoch from date_trunc(\'seconds\', ' . $now . ')) as time;');
- $query->execute();
-
- $json{'time'} = int($query->fetchrow_hashref()->{'time'});
- $json{'hash'} = $hash;
-
- printcc;
-
- print "Etag: $hash\n";
- print "Access-Control-Allow-Origin: *\n";
- print "Access-Control-Allow-Methods: HEAD, GET\n";
- print "Content-Type: text/json; charset=utf-8\n\n";
- print JSON::XS::encode_json(\%json);
- print "\n";
-}
-
-sub populate_params {
- my $querystring = $ENV{'QUERY_STRING'} || "";
- foreach my $hdr (split("&",$querystring)) {
- my ($key, $value) = split("=",$hdr,"2");
- $get_params{$key} = URI::Escape::uri_unescape($value);
- }
-}
-
-BEGIN {
- $cc{'stale-while-revalidate'} = "3600";
- $cc{'max-age'} = "20";
-
- $dbh = nms::db_connect();
- populate_params();
- setwhen();
-}
-1;
diff --git a/netlist.txt b/netlist.txt
deleted file mode 100644
index db30ece..0000000
--- a/netlist.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-# manually added networks
-
-
-
-
-
-# added initially when bootstrapping
-185.110.150.0/25 2a06:5841:150a::/64 noc
-185.110.151.0/27 2a06:5841:151a::/64 tech-wlan
-
-88.92.96.0/19 2a06:5840:96::/64 wlan
-
-88.92.51.0/26 2a06:5840:51a::/64 ap-distro0
-88.92.51.64/26 2a06:5840:51b::/64 ap-distro1
-88.92.51.128/26 2a06:5840:51c::/64 ap-distro2
-88.92.51.192/26 2a06:5840:51d::/64 ap-distro3
-
-88.92.52.0/26 2a06:5840:52a::/64 ap-distro4
-88.92.52.64/26 2a06:5840:52b::/64 ap-distro5
-88.92.52.128/26 2a06:5840:52c::/64 ap-distro6
-88.92.52.192/26 2a06:5840:52d::/64 ap-distro7
-
-88.92.53.0/26 2a06:5840:53a::/64 ap-distro8
-88.92.53.64/26 2a06:5840:53b::/64 ap-stand
-88.92.53.128/25 2a06:5840:53c::/64 ap-ring
-
-
-
-# from switches.txt
-88.92.0.0/26 2a06:5840:0a::/64 e1-3
-88.92.0.64/26 2a06:5840:0b::/64 e1-4
-88.92.0.128/26 2a06:5840:0c::/64 e3-1
-88.92.0.192/26 2a06:5840:0d::/64 e3-2
-88.92.1.0/26 2a06:5840:1a::/64 e3-3
-88.92.1.64/26 2a06:5840:1b::/64 e3-4
-88.92.1.128/26 2a06:5840:1c::/64 e5-1
-88.92.1.192/26 2a06:5840:1d::/64 e5-2
-88.92.2.0/26 2a06:5840:2a::/64 e5-3
-88.92.2.64/26 2a06:5840:2b::/64 e5-4
-88.92.2.128/26 2a06:5840:2c::/64 e7-1
-88.92.2.192/26 2a06:5840:2d::/64 e7-2
-88.92.3.0/26 2a06:5840:3a::/64 e7-3
-88.92.3.64/26 2a06:5840:3b::/64 e7-4
-88.92.3.128/26 2a06:5840:3c::/64 e9-1
-88.92.3.192/26 2a06:5840:3d::/64 e9-2
-88.92.4.0/26 2a06:5840:4a::/64 e9-3
-88.92.4.64/26 2a06:5840:4b::/64 e9-4
-88.92.4.128/26 2a06:5840:4c::/64 e11-1
-88.92.4.192/26 2a06:5840:4d::/64 e11-2
-88.92.5.0/26 2a06:5840:5a::/64 e11-3
-88.92.5.64/26 2a06:5840:5b::/64 e11-4
-88.92.5.128/26 2a06:5840:5c::/64 e13-1
-88.92.5.192/26 2a06:5840:5d::/64 e13-2
-88.92.6.0/26 2a06:5840:6a::/64 e13-3
-88.92.6.64/26 2a06:5840:6b::/64 e13-4
-88.92.6.128/26 2a06:5840:6c::/64 e15-1
-88.92.6.192/26 2a06:5840:6d::/64 e15-2
-88.92.7.0/26 2a06:5840:7a::/64 e15-3
-88.92.7.64/26 2a06:5840:7b::/64 e15-4
-88.92.7.128/26 2a06:5840:7c::/64 e17-1
-88.92.7.192/26 2a06:5840:7d::/64 e17-2
-88.92.8.0/26 2a06:5840:8a::/64 e17-3
-88.92.8.64/26 2a06:5840:8b::/64 e17-4
-88.92.8.128/26 2a06:5840:8c::/64 e19-1
-88.92.8.192/26 2a06:5840:8d::/64 e19-2
-88.92.9.0/26 2a06:5840:9a::/64 e19-3
-88.92.9.64/26 2a06:5840:9b::/64 e19-4
-88.92.9.128/26 2a06:5840:9c::/64 e21-1
-88.92.9.192/26 2a06:5840:9d::/64 e21-2
-88.92.10.0/26 2a06:5840:10a::/64 e23-1
-88.92.10.64/26 2a06:5840:10b::/64 e23-2
-88.92.10.128/26 2a06:5840:10c::/64 e25-1
-88.92.10.192/26 2a06:5840:10d::/64 e25-2
-88.92.11.0/26 2a06:5840:11a::/64 e27-1
-88.92.11.64/26 2a06:5840:11b::/64 e27-2
-88.92.11.128/26 2a06:5840:11c::/64 e29-1
-88.92.11.192/26 2a06:5840:11d::/64 e29-2
-88.92.12.0/26 2a06:5840:12a::/64 e31-1
-88.92.12.64/26 2a06:5840:12b::/64 e31-2
-88.92.12.128/26 2a06:5840:12c::/64 e33-1
-88.92.12.192/26 2a06:5840:12d::/64 e33-2
-88.92.13.0/26 2a06:5840:13a::/64 e35-1
-88.92.13.64/26 2a06:5840:13b::/64 e35-2
-88.92.13.128/26 2a06:5840:13c::/64 e37-1
-88.92.13.192/26 2a06:5840:13d::/64 e37-2
-88.92.14.0/26 2a06:5840:14a::/64 e37-3
-88.92.14.64/26 2a06:5840:14b::/64 e37-4
-88.92.14.128/26 2a06:5840:14c::/64 e39-1
-88.92.14.192/26 2a06:5840:14d::/64 e39-2
-88.92.15.0/26 2a06:5840:15a::/64 e39-3
-88.92.15.64/26 2a06:5840:15b::/64 e39-4
-88.92.15.128/26 2a06:5840:15c::/64 e41-1
-88.92.15.192/26 2a06:5840:15d::/64 e41-2
-88.92.16.0/26 2a06:5840:16a::/64 e41-3
-88.92.16.64/26 2a06:5840:16b::/64 e41-4
-88.92.16.128/26 2a06:5840:16c::/64 e43-1
-88.92.16.192/26 2a06:5840:16d::/64 e43-2
-88.92.17.0/26 2a06:5840:17a::/64 e43-3
-88.92.17.64/26 2a06:5840:17b::/64 e43-4
-88.92.17.128/26 2a06:5840:17c::/64 e45-1
-88.92.17.192/26 2a06:5840:17d::/64 e45-2
-88.92.18.0/26 2a06:5840:18a::/64 e45-3
-88.92.18.64/26 2a06:5840:18b::/64 e45-4
-88.92.18.128/26 2a06:5840:18c::/64 e47-1
-88.92.18.192/26 2a06:5840:18d::/64 e47-2
-88.92.19.0/26 2a06:5840:19a::/64 e47-3
-88.92.19.64/26 2a06:5840:19b::/64 e47-4
-88.92.19.128/26 2a06:5840:19c::/64 e49-1
-88.92.19.192/26 2a06:5840:19d::/64 e49-2
-88.92.20.0/26 2a06:5840:20a::/64 e49-3
-88.92.20.64/26 2a06:5840:20b::/64 e49-4
-88.92.20.128/26 2a06:5840:20c::/64 e51-1
-88.92.20.192/26 2a06:5840:20d::/64 e51-2
-88.92.21.0/26 2a06:5840:21a::/64 e51-3
-88.92.21.64/26 2a06:5840:21b::/64 e51-4
-88.92.21.128/26 2a06:5840:21c::/64 e53-1
-88.92.21.192/26 2a06:5840:21d::/64 e53-2
-88.92.22.0/26 2a06:5840:22a::/64 e53-3
-88.92.22.64/26 2a06:5840:22b::/64 e53-4
-88.92.22.128/26 2a06:5840:22c::/64 e55-1
-88.92.22.192/26 2a06:5840:22d::/64 e55-2
-88.92.23.0/26 2a06:5840:23a::/64 e55-3
-88.92.23.64/26 2a06:5840:23b::/64 e55-4
-88.92.23.128/26 2a06:5840:23c::/64 e57-1
-88.92.23.192/26 2a06:5840:23d::/64 e57-2
-88.92.24.0/26 2a06:5840:24a::/64 e57-3
-88.92.24.64/26 2a06:5840:24b::/64 e57-4
-88.92.24.128/26 2a06:5840:24c::/64 e59-1
-88.92.24.192/26 2a06:5840:24d::/64 e59-2
-88.92.25.0/26 2a06:5840:25a::/64 e59-3
-88.92.25.64/26 2a06:5840:25b::/64 e59-4
-88.92.25.128/26 2a06:5840:25c::/64 e61-1
-88.92.25.192/26 2a06:5840:25d::/64 e61-2
-88.92.26.0/26 2a06:5840:26a::/64 e61-3
-88.92.26.64/26 2a06:5840:26b::/64 e61-4
-88.92.26.128/26 2a06:5840:26c::/64 e63-1
-88.92.26.192/26 2a06:5840:26d::/64 e63-2
-88.92.27.0/26 2a06:5840:27a::/64 e63-3
-88.92.27.64/26 2a06:5840:27b::/64 e63-4
-88.92.27.128/26 2a06:5840:27c::/64 e65-1
-88.92.27.192/26 2a06:5840:27d::/64 e65-2
-88.92.28.0/26 2a06:5840:28a::/64 e65-3
-88.92.28.64/26 2a06:5840:28b::/64 e65-4
-88.92.28.128/26 2a06:5840:28c::/64 e67-1
-88.92.28.192/26 2a06:5840:28d::/64 e67-2
-88.92.29.0/26 2a06:5840:29a::/64 e67-3
-88.92.29.64/26 2a06:5840:29b::/64 e67-4
-88.92.29.128/26 2a06:5840:29c::/64 e69-1
-88.92.29.192/26 2a06:5840:29d::/64 e69-2
-88.92.30.0/26 2a06:5840:30a::/64 e69-3
-88.92.30.64/26 2a06:5840:30b::/64 e69-4
-88.92.30.128/26 2a06:5840:30c::/64 e71-1
-88.92.30.192/26 2a06:5840:30d::/64 e71-2
-88.92.31.0/26 2a06:5840:31a::/64 e71-3
-88.92.31.64/26 2a06:5840:31b::/64 e71-4
-88.92.31.128/26 2a06:5840:31c::/64 e73-1
-88.92.31.192/26 2a06:5840:31d::/64 e73-2
-88.92.32.0/26 2a06:5840:32a::/64 e73-3
-88.92.32.64/26 2a06:5840:32b::/64 e73-4
-88.92.32.128/26 2a06:5840:32c::/64 e75-1
-88.92.32.192/26 2a06:5840:32d::/64 e75-2
-88.92.33.0/26 2a06:5840:33a::/64 e75-3
-88.92.33.64/26 2a06:5840:33b::/64 e75-4
-88.92.33.128/26 2a06:5840:33c::/64 e77-1
-88.92.33.192/26 2a06:5840:33d::/64 e77-2
-88.92.34.0/26 2a06:5840:34a::/64 e77-3
-88.92.34.64/26 2a06:5840:34b::/64 e77-4
-88.92.34.128/26 2a06:5840:34c::/64 e79-1
-88.92.34.192/26 2a06:5840:34d::/64 e79-2
-88.92.35.0/26 2a06:5840:35a::/64 e79-3
-88.92.35.64/26 2a06:5840:35b::/64 e79-4
-88.92.35.128/26 2a06:5840:35c::/64 e81-2
-88.92.35.192/26 2a06:5840:35d::/64 e81-3
-88.92.36.0/26 2a06:5840:36a::/64 e81-4
diff --git a/nms/.bashrc b/nms/.bashrc
deleted file mode 100644
index 06072e3..0000000
--- a/nms/.bashrc
+++ /dev/null
@@ -1,16 +0,0 @@
-NAME='NMS Docker'
-
-
-ln -s /srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf /etc/apache2/sites-enabled/
-ln -s /srv/tgmanage/nms/config.pm /srv/tgmanage/include/
-echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/.htpasswd
-
-/etc/init.d/apache2 restart
-echo "go here to look at nms: http://172.17.0.2:8080/"
-
-# Aliases
-alias h="history"
-alias l="ls -lAhoF --color --show-control-chars"
-alias ll="ls -lash --color --show-control-chars"
-alias cd..="cd .."
-
diff --git a/nms/.gitignore b/nms/.gitignore
deleted file mode 100644
index 567609b..0000000
--- a/nms/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-build/
diff --git a/nms/Dockerfile.in b/nms/Dockerfile.in
deleted file mode 100644
index 9f0dfd6..0000000
--- a/nms/Dockerfile.in
+++ /dev/null
@@ -1,119 +0,0 @@
-@template nms-base
-
-FROM debian:jessie
-
-ENV container docker
-MAINTAINER "Kristian" <kly@kly.no>
-#RUN systemctl set-default basic.target
-RUN apt-get update && apt-get -y install \
- wget \
- vim \
- man \
- build-essential \
- net-tools \
- bash-completion \
- git-core \
- autoconf \
- netcat \
- libwww-perl \
- libmicrohttpd-dev \
- libcurl4-gnutls-dev \
- libedit-dev \
- libpcre3-dev \
- libncurses5-dev \
- python-demjson \
- python-docutils \
- libtool \
- nodejs \
- httpie \
- locales \
- screen \
- openssh-server \
- pkg-config
-
-VOLUME [ "/sys/fs/cgroup" ]
-VOLUME [ "/run" ]
-VOLUME [ "/run/lock" ]
-RUN echo en_US.UTF8 UTF-8 > /etc/locale.gen
-RUN locale-gen
-RUN echo 'LANG="en_US.utf8"' > /etc/default/locale
-RUN echo . /etc/default/locale >> /root/.bashrc
-RUN echo export LANG >> /root/.bashrc
-RUN echo . /etc/bash_completion >> /root/.bashrc
-ENV TERM=rxvt-unicode
-RUN rm /etc/apt/apt.conf.d/docker-clean
-RUN systemctl mask dev-hugepages.mount sys-fs-fuse-connections.mount systemd-logind.service
-RUN git clone https://github.com/tech-server/tgmanage.git /srv/tgmanage
-#RUN systemctl disable systemd-logind.service
-CMD ["/sbin/init"]
-
-@template nms-front
-FROM nms-base
-RUN apt-get -y install \
- libcapture-tiny-perl \
- libcgi-pm-perl \
- libcommon-sense-perl \
- libdata-dumper-simple-perl \
- libdbd-pg-perl \
- libdbi-perl \
- libdigest-perl \
- libgd-perl \
- libgeo-ip-perl \
- libhtml-parser-perl \
- libhtml-template-perl \
- libimage-magick-perl \
- libimage-magick-q16-perl \
- libjson-perl \
- libjson-xs-perl \
- libnetaddr-ip-perl \
- libnet-cidr-perl \
- libnet-ip-perl \
- libnet-openssh-perl \
- libnet-oping-perl \
- libnet-rawip-perl \
- libnet-telnet-cisco-perl \
- libnet-telnet-perl \
- libsnmp-perl \
- libsocket6-perl \
- libsocket-perl \
- libswitch-perl \
- libtimedate-perl \
- perl \
- perl-base \
- perl-modules \
- varnish \
- libfreezethaw-perl \
- apache2
-
-RUN cd /srv/tgmanage/ && tools/get_mibs.sh
-
-# Apache shait
-RUN a2dissite 000-default
-RUN a2enmod cgi
-RUN sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf
-RUN ln -s /srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf /etc/apache2/sites-enabled/
-#(no, not for production, it's just demo:demo during development)
-RUN echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/htpasswd-read
-RUN echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/htpasswd-write
-RUN systemctl enable apache2
-
-# Varnish shait
-RUN rm /etc/varnish/default.vcl
-RUN ln -s /srv/tgmanage/web/etc/varnish/nms.vcl /etc/varnish/default.vcl
-RUN sed -i 's/6081/80/' /lib/systemd/system/varnish.service
-RUN systemctl enable varnish
-
-ADD config.pm /srv/tgmanage/include/
-
-@template nms-db
-FROM nms-base
-RUN apt-get install -y postgresql-doc-9.4 postgresql-9.4
-ADD nms-dump.sql /
-ADD postgresql.conf /etc/postgresql/9.4/main/
-ADD pg_hba.conf /etc/postgresql/9.4/main/
-RUN chown -R postgres:postgres /etc/postgresql/
-RUN chmod a+r /etc/postgresql/9.4/main/*conf
-RUN service postgresql start && su postgres -c "psql --command=\"CREATE ROLE nms PASSWORD 'md5f6f0a94af5ec8b6001e41b8f06fd22d8' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;\"" && su postgres -c "createdb -O nms nms" && service postgresql stop
-RUN service postgresql start && su postgres -c "cat /nms-dump.sql | psql nms" && service postgresql stop
-RUN service postgresql start && su postgres -c "psql --command=\"ALTER ROLE nms PASSWORD 'md5f6f0a94af5ec8b6001e41b8f06fd22d8';\"" && service postgresql stop
-EXPOSE 5432
diff --git a/nms/README.md b/nms/README.md
deleted file mode 100644
index 9a23e8d..0000000
--- a/nms/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-#Instructions
-
-## Installation
-- fetch data from tg server: `scp ${USER}@wat.gathering.org:/root/nms-2015.sql.gz .`
-- Rename the nms dump so we can use it later: `mv nms-2015.sql.gz nms-dump.sql.gz`
-
-- Do the Debian install(or whatever OS you're on.):
-https://docs.docker.com/engine/installation/linux/debian/
-And make sure that your user is in the docker group, so that you can run docker without sudo.
-
-- Clone repository: `git clone git@github.com:tech-server/tgmanage.git`
-
-- run `./makedockerfiles.sh`, which creates the docker image files, and builds
- them.
-
-- Start database node:
-`docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db`
-
-- Start front end node:
--- with cgroup: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front`
--- getting to prompt(without cgroup):
-`docker run -v "/home/kiro/repos/tgmanage:/srv/tgmanage" -v "/home/kiro/repos/tgmanage/nms/.bashrc:/root/.bashrc" -w "/srv/tgmanage/web/nms.gathering.org" \
--rm=true -ti --name=front --privileged nms-front /bin/bash`
-
-- Find IP's:
-`docker inspect nms-db | grep "IPAddress\":"`
-`docker inspect nms-front | grep "IPAddress\":"`
-
-- Open the nms-front ip in the web browser.
-http://172.17.0.2:8080/
-
-- Note: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --rm -ti`
diff --git a/nms/ansible/inventories/localtest b/nms/ansible/inventories/localtest
deleted file mode 100644
index 1a527db..0000000
--- a/nms/ansible/inventories/localtest
+++ /dev/null
@@ -1,5 +0,0 @@
-[db]
-nms-dev-db.gathering.org
-
-[nms-front]
-dockerlol
diff --git a/nms/ansible/inventories/prod b/nms/ansible/inventories/prod
deleted file mode 100644
index 4c4f31b..0000000
--- a/nms/ansible/inventories/prod
+++ /dev/null
@@ -1,5 +0,0 @@
-[db]
-nms-dev-db.gathering.org
-
-[nms-front]
-nms-dev-db.gathering.org
diff --git a/nms/ansible/roles/nmsfront/handlers/main.yml b/nms/ansible/roles/nmsfront/handlers/main.yml
deleted file mode 100644
index 5cc3cb8..0000000
--- a/nms/ansible/roles/nmsfront/handlers/main.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: restart apache
- service: name=apache2 state=restarted
-
-- name: restart varnish
- service: name=varnish state=restarted
diff --git a/nms/ansible/roles/nmsfront/tasks/main.yml b/nms/ansible/roles/nmsfront/tasks/main.yml
deleted file mode 100644
index d4e8d00..0000000
--- a/nms/ansible/roles/nmsfront/tasks/main.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-- name: Basic packages
- apt: name={{ item }} state=present
- with_items:
- - python-demjson
- - python-passlib
- - libcapture-tiny-perl
- - libcommon-sense-perl
- - libdata-dumper-simple-perl
- - libdbd-pg-perl
- - libdbi-perl
- - libdigest-perl
- - libjson-perl
- - libjson-xs-perl
- - libnetaddr-ip-perl
- - libnet-cidr-perl
- - libnet-ip-perl
- - libnet-openssh-perl
- - libnet-oping-perl
- - libnet-rawip-perl
- - libsnmp-perl
- - libsocket6-perl
- - libsocket-perl
- - libswitch-perl
- - libtimedate-perl
- - perl
- - perl-base
- - perl-modules
- - varnish
- - libfreezethaw-perl
- - apache2
-
-- name: Enable CGI
- apache2_module: state=present name=cgid
- notify:
- - restart apache
-
-- name: Remove default apache site
- file: path=/etc/apache2/sites-enabled/000-default.conf state=absent
- notify:
- - restart apache
-
-- name: Add NMS site config
- file: src=/srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf dest=/etc/apache2/sites-enabled/nms.tg16.gathering.org.conf state=link
- notify:
- - restart apache
-
-- name: "Apache: Don't listen on 80"
- lineinfile: line="Listen 80" state=absent dest=/etc/apache2/ports.conf
- notify:
- - restart apache
-
-- name: "Apache: DO listen on 8080"
- lineinfile: line="Listen 8080" state=present dest=/etc/apache2/ports.conf
- notify:
- - restart apache
-
-- name: "Varnish: Set up VCL"
- file: path=/etc/varnish/default.vcl src=/srv/tgmanage/web/etc/varnish/nms.vcl state=link force=true
- notify:
- - restart varnish
-
-- name: "Varnish: Remove default systemd config"
- lineinfile: line="ExecStart=/usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m" state=absent dest=/lib/systemd/system/varnish.service
- notify:
- - restart varnish
-
-- name: "Varnish: Add sensible systemd config"
- lineinfile: line="ExecStart=/usr/sbin/varnishd -f /etc/varnish/default.vcl -s malloc,256m" state=present dest=/lib/systemd/system/varnish.service insertafter="Service"
- notify:
- - restart varnish
-
-- name: Setup basic auth for nms read-only
- htpasswd: path=/srv/tgmanage/web/htpasswd-read name=tg password={{ htpasswd_tg }} owner=root group=www-data mode=0640
-
-- name: Setup basic auth for nms write-only
- htpasswd: path=/srv/tgmanage/web/htpasswd-write name=tg password={{ htpasswd_tg }} owner=root group=www-data mode=0640
diff --git a/nms/ansible/roles/nmsfront/vars/main.yml b/nms/ansible/roles/nmsfront/vars/main.yml
deleted file mode 100644
index b7e2a81..0000000
--- a/nms/ansible/roles/nmsfront/vars/main.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-$ANSIBLE_VAULT;1.1;AES256
-36643163343266613738383865323138366265616435316431663035623038623339666462633634
-3130363031633765306233333133363633663130393238660a646566396636653835383037613236
-37383335336361323962383838333330656634636461303636343166613236633566316533646561
-6130303831626632320a353732663631313931346136376536336234613866323966363062663265
-62363238393062363933623030643165396466383438623734316565663935363464
diff --git a/nms/ansible/roles/tgmanage/tasks/main.yml b/nms/ansible/roles/tgmanage/tasks/main.yml
deleted file mode 100644
index cbd48ae..0000000
--- a/nms/ansible/roles/tgmanage/tasks/main.yml
+++ /dev/null
@@ -1,14 +0,0 @@
----
- - name: Git core
- apt: name=git-core state=present
-
- # Note the update!
- #
- # The idea here is that you run this playbook repeatedly on whatever
- # "production" site is in use instead of manually logging in and doing
- # changes.
- - name: tgmanage repo
- git: repo=https://github.com/tech-server/tgmanage.git dest=/srv/tgmanage update=true accept_hostkey=yes track_submodules=no
-
- - name: "Copy config.pm.dist to config.pm"
- template: src=config.pm.j2 dest=/srv/tgmanage/include/config.pm mode=0644
diff --git a/nms/ansible/roles/tgmanage/templates/config.pm.j2 b/nms/ansible/roles/tgmanage/templates/config.pm.j2
deleted file mode 100755
index 73b59e3..0000000
--- a/nms/ansible/roles/tgmanage/templates/config.pm.j2
+++ /dev/null
@@ -1,109 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use DBI;
-package nms::config;
-
-# DB
-our $db_name = "{{ db_name }}";
-our $db_host = "{{ db_host }}";
-our $db_username = "{{ db_user }}";
-our $db_password = "{{ db_password }}";
-
-# NMS: What SNMP objects to fetch.
-# Some basics
-our @snmp_objects = [
-['ifIndex'],
-['sysName'],
-['sysDescr'],
-['ifHighSpeed'],
-['ifType'],
-['ifName'],
-['ifDescr'],
-['ifAlias'],
-['ifOperStatus'],
-['ifAdminStatus'],
-['ifLastChange'],
-['ifHCInOctets'],
-['ifHCOutOctets'],
-['ifInDiscards'],
-['ifOutDiscards'],
-['ifInErrors'],
-['ifOutErrors'],
-['ifInUnknownProtos'],
-['ifOutQLen'],
-['sysUpTime'],
-['jnxOperatingTemp'],
-['jnxOperatingCPU'],
-['jnxOperatingDescr'],
-['jnxBoxSerialNo']
-];
-# Max SNMP polls to fire off at the same time.
-our $snmp_max = 20;
-
-# DHCP-servers
-our $dhcp_server1 = "185.110.149.2"; # primary
-our $dhcp_server2 = "185.110.148.2"; # secondary
-
-# TACACS-login for NMS
-our $tacacs_user = "<removed>";
-our $tacacs_pass = "<removed>";
-
-# Telnet-timeout for smanagrun
-our $telnet_timeout = 300;
-
-# IP/IPv6/DNS-info
-our $tgname = "tg16";
-our $pri_hostname = "r2-d2";
-our $pri_v4 = "185.110.149.2";
-our $pri_v6 = "2a06:5841:149a::2";
-our $pri_net_v4 = "185.110.149.0/26";
-our $pri_net_v6 = "2a06:5841:149a::/64";
-
-our $sec_hostname = "c-3po";
-our $sec_v4 = "185.110.148.2";
-our $sec_v6 = "2a06:5841:1337::2";
-our $sec_net_v4 = "185.110.148.0/26";
-our $sec_net_v6 = "2a06:5841:1337::/64";
-
-# for RIPE to get reverse zones via DNS AXFR
-# https://www.ripe.net/data-tools/dns/reverse-dns/how-to-set-up-reverse-delegation
-our $ext_xfer = "193.0.0.0/22; 2001:610:240::/48; 2001:67c:2e8::/48";
-
-# allow XFR from NOC
-our $noc_net = "185.110.150.0/25; 2a06:5841:150a::1/64";
-
-# To generate new dnssec-key for ddns:
-# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_UPDATER
-our $ddns_key = "<removed>";
-our $ddns_to = "127.0.0.1"; # just use localhost
-
-# Base networks
-our $base_ipv4net = "88.92.0.0/17";
-our $base_ipv6net = "2a06:5840::/29";
-our $ipv6zone = "0.4.8.5.6.0.a.2.ip6.arpa";
-
-# extra networks that are outside the normal ranges
-# that should have recursive DNS access
-our $rec_net = "185.110.148.0/22";
-
-# extra networks that are outside the normal ranges
-# that should be added to DNS
-our @extra_nets = (
- '185.110.148.0/24',
- '185.110.149.0/24',
- '185.110.150.0/24',
- '185.110.151.0/24',
-);
-
-# add WLC's
-our $wlc1 = "185.110.148.14";
-
-# add VOIP-server
-our $voip1 = "<removed>";
-
-# PXE-server (rest of bootstrap assumes $sec_v4/$sec_v6)
-our $pxe_server_v4 = $sec_v4;
-our $pxe_server_v6 = $sec_v6;
-
-1;
diff --git a/nms/ansible/roles/tgmanage/vars/main.yml b/nms/ansible/roles/tgmanage/vars/main.yml
deleted file mode 100644
index 447e3e8..0000000
--- a/nms/ansible/roles/tgmanage/vars/main.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-$ANSIBLE_VAULT;1.1;AES256
-63623639616438346566333434306435303933343234636339336638633166626465613832656462
-3764636465303334666265626334613364383833623239660a366136303264323463656336333732
-33323236626465656535313938663534306462383265313635393634336233303735383033333737
-6465383165653738300a653663303362333030386638313237656535643563333033633838656630
-34333430623934346565303765666239646363613230326531663032323164346365356466363134
-36356239643235303039366363353065306130656462383135343031366234316535386635306466
-30303039656531353339333434633566316534613538666432336135363864383139303035343436
-32396130643366363339363934653763326432396165393531656533376237346563376434653932
-66333565316336643366643336633131323066663862363735636464376138303031623933386363
-33396364623331393438393036623261323866643430623137626430326162663936633766646231
-36656533343466653735386136663764613466663033613561373734303565323534323436623066
-38653761396334643236
diff --git a/nms/ansible/site.yml b/nms/ansible/site.yml
deleted file mode 100644
index e0f534a..0000000
--- a/nms/ansible/site.yml
+++ /dev/null
@@ -1,70 +0,0 @@
----
-- hosts: all
- roles:
- - tgmanage
-
-- hosts: nms-front
- roles:
- - nmsfront
- become: false
- tasks:
- # Some of these are probably redundant, but kept around because it works
- # and they aren't too bad.
- - name: Misc packages
- apt: name={{ item }} state=present
- with_items:
- - wget
- - vim
- - man
- - build-essential
- - net-tools
- - bash-completion
- - git-core
- - autoconf
- - netcat
- - libwww-perl
- - libmicrohttpd-dev
- - libcurl4-gnutls-dev
- - libedit-dev
- - libpcre3-dev
- - libncurses5-dev
- - python-demjson
- - python-docutils
- - libtool
- - locales
- - screen
- - openssh-server
- - libcapture-tiny-perl
- - libcgi-pm-perl
- - libcommon-sense-perl
- - libdata-dumper-simple-perl
- - libdbd-pg-perl
- - libdbi-perl
- - libdigest-perl
- - libgd-perl
- - libgeo-ip-perl
- - libhtml-parser-perl
- - libhtml-template-perl
- - libimage-magick-perl
- - libimage-magick-q16-perl
- - libjson-perl
- - libjson-xs-perl
- - libnetaddr-ip-perl
- - libnet-cidr-perl
- - libnet-ip-perl
- - libnet-openssh-perl
- - libnet-oping-perl
- - libnet-rawip-perl
- - libnet-telnet-cisco-perl
- - libnet-telnet-perl
- - libsnmp-perl
- - libsocket6-perl
- - libsocket-perl
- - libswitch-perl
- - libtimedate-perl
- - perl
- - perl-base
- - perl-modules
- - varnish
- - libfreezethaw-perl
- - apache2
diff --git a/nms/config.pm b/nms/config.pm
deleted file mode 100755
index db9775f..0000000
--- a/nms/config.pm
+++ /dev/null
@@ -1,81 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use DBI;
-package nms::config;
-
-# DB
-our $db_name = "nms";
-our $db_host = "nms-dev-db.gathering.org";
-our $db_username = "nms";
-our $db_password = "nms-lol";
-
-# NMS hash used for public NMS obfuscation of interface names
-our $nms_hash = "<removed>";
-
-# DHCP-servers
-our $dhcp_server1 = "185.12.59.66"; # primary
-our $dhcp_server2 = "185.12.59.2"; # secondary
-
-# TACACS-login for NMS
-our $tacacs_user = "<removed>";
-our $tacacs_pass = "<removed>";
-
-# SNMP read-only for NMS, etc
-our $snmp_community = "<removed>";
-
-# Telnet-timeout for smanagrun
-our $telnet_timeout = 300;
-
-# IP/IPv6/DNS-info
-our $tgname = "tg15";
-our $pri_hostname = "marty";
-our $pri_v4 = "185.12.59.66";
-our $pri_v6 = "2a02:ed02:1ee7::66";
-our $pri_net_v4 = "185.12.59.64/27";
-our $pri_net_v6 = "2a02:ed02:1ee7::/64";
-
-our $sec_hostname = "emmet";
-our $sec_v4 = "185.12.59.2";
-our $sec_v6 = "2a02:ed02:1337::2";
-our $sec_net_v4 = "185.12.59.0/26";
-our $sec_net_v6 = "2a02:ed02:1337::/64";
-
-# for RIPE to get reverse zones via DNS AXFR
-# https://www.ripe.net/data-tools/dns/reverse-dns/how-to-set-up-reverse-delegation
-our $ext_xfer = "193.0.0.0/22; 2001:610:240::/48; 2001:67c:2e8::/48";
-
-# allow XFR from NOC
-our $noc_net = "151.216.254.0/24; 2a02:ed02:254::/64";
-
-# To generate new dnssec-key for ddns:
-# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_UPDATER
-our $ddns_key = "<removed>";
-our $ddns_to = "127.0.0.1"; # just use localhost
-
-# Base networks
-our $base_ipv4net = "151.216.128.0/17";
-our $base_ipv6net = "2a02:ed02::/32";
-our $ipv6zone = "2.0.d.e.2.0.a.2.ip6.arpa";
-
-# extra networks that are outside the normal ranges
-# that should have recursive DNS access
-our $rec_net = "185.12.59.0/24";
-
-# extra networks that are outside the normal ranges
-# that should be added to DNS
-our @extra_nets = (
- '185.12.59.0/24', # norsk nett
-);
-
-# add WLC's
-our $wlc1 = "151.216.128.130";
-
-# add VOIP-server
-our $voip1 = "<removed>";
-
-# PXE-server (rest of bootstrap assumes $sec_v4/$sec_v6)
-our $pxe_server_v4 = $sec_v4;
-our $pxe_server_v6 = $sec_v6;
-
-1;
diff --git a/nms/makedockerfiles.sh b/nms/makedockerfiles.sh
deleted file mode 100755
index 6c7e3da..0000000
--- a/nms/makedockerfiles.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-awk -v TARGET=/dev/null '
-BEGIN {
- system("mkdir -p build")
-}
-/^@template/ {
- TARGET="build/Dockerfile."$2;
- TARGETS[ntargets++]=$2;
- print "# Generated" > TARGET
- next;
-}
-{
- print > TARGET
-}
-END {
- print "#! /bin/sh" > "build/build.sh"
- print "set -e" > "build/build.sh"
- for (x in TARGETS) {
- a = TARGETS[x]
- print "echo Building "a > "build/build.sh"
- print "echo Logs: build/"a".log" > "build/build.sh"
- print "docker build -t "a" -f build/Dockerfile."a" . > build/"a".log 2>&1 || cat build/"a".log" > "build/build.sh"
- }
- system("chmod +x build/build.sh")
-}' < Dockerfile.in
-build/build.sh
diff --git a/nms/nms-dump.sql b/nms/nms-dump.sql
deleted file mode 100644
index 25ba3ac..0000000
--- a/nms/nms-dump.sql
+++ /dev/null
@@ -1,695 +0,0 @@
---
--- PostgreSQL database dump
---
-
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SET check_function_bodies = false;
-SET client_min_messages = warning;
-
---
--- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
---
-
-CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
-
-
---
--- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
---
-
-COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
-
-
-SET search_path = public, pg_catalog;
-
---
--- Name: comment_state; Type: TYPE; Schema: public; Owner: nms
---
-
-CREATE TYPE comment_state AS ENUM (
- 'active',
- 'inactive',
- 'persist',
- 'delete'
-);
-
-
-ALTER TYPE comment_state OWNER TO nms;
-
-SET default_tablespace = '';
-
-SET default_with_oids = false;
-
---
--- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE dhcp (
- switch integer,
- "time" timestamp with time zone,
- mac macaddr,
- ip inet
-);
-
-
-ALTER TABLE dhcp OWNER TO nms;
-
---
--- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE linknet_ping (
- linknet integer NOT NULL,
- "time" timestamp with time zone DEFAULT now() NOT NULL,
- latency1_ms double precision,
- latency2_ms double precision
-);
-
-
-ALTER TABLE linknet_ping OWNER TO nms;
-
---
--- Name: linknets; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE linknets (
- linknet integer NOT NULL,
- switch1 integer NOT NULL,
- addr1 inet,
- switch2 integer NOT NULL,
- addr2 inet,
- port1 character varying(10),
- port2 character varying(10)
-);
-
-
-ALTER TABLE linknets OWNER TO nms;
-
---
--- Name: linknets_linknet_seq; Type: SEQUENCE; Schema: public; Owner: nms
---
-
-CREATE SEQUENCE linknets_linknet_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER TABLE linknets_linknet_seq OWNER TO nms;
-
---
--- Name: linknets_linknet_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
---
-
-ALTER SEQUENCE linknets_linknet_seq OWNED BY linknets.linknet;
-
-
---
--- Name: ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE ping (
- switch integer NOT NULL,
- "time" timestamp with time zone DEFAULT now() NOT NULL,
- latency_ms double precision
-);
-
-
-ALTER TABLE ping OWNER TO nms;
-
---
--- Name: ping_secondary_ip; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE ping_secondary_ip (
- switch integer NOT NULL,
- "time" timestamp with time zone DEFAULT now() NOT NULL,
- latency_ms double precision
-);
-
-
-ALTER TABLE ping_secondary_ip OWNER TO nms;
-
---
--- Name: polls; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE polls (
- switch integer NOT NULL,
- "time" timestamp with time zone NOT NULL,
- ifname character varying(30) NOT NULL,
- ifhighspeed integer,
- ifhcoutoctets bigint,
- ifhcinoctets bigint
-);
-
-
-ALTER TABLE polls OWNER TO nms;
-
---
--- Name: seen_mac; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE seen_mac (
- mac macaddr NOT NULL,
- address inet NOT NULL,
- seen timestamp with time zone DEFAULT now() NOT NULL
-);
-
-
-ALTER TABLE seen_mac OWNER TO nms;
-
---
--- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE snmp (
- "time" timestamp without time zone DEFAULT now() NOT NULL,
- switch integer NOT NULL,
- data jsonb,
- id integer NOT NULL
-);
-
-
-ALTER TABLE snmp OWNER TO nms;
-
---
--- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
---
-
-CREATE SEQUENCE snmp_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER TABLE snmp_id_seq OWNER TO nms;
-
---
--- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
---
-
-ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id;
-
-
---
--- Name: switch_comments; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE switch_comments (
- switch integer NOT NULL,
- "time" timestamp with time zone,
- comment text,
- state comment_state DEFAULT 'active'::comment_state,
- username character varying(32),
- id integer NOT NULL
-);
-
-
-ALTER TABLE switch_comments OWNER TO nms;
-
---
--- Name: switch_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
---
-
-CREATE SEQUENCE switch_comments_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER TABLE switch_comments_id_seq OWNER TO nms;
-
---
--- Name: switch_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
---
-
-ALTER SEQUENCE switch_comments_id_seq OWNED BY switch_comments.id;
-
-
---
--- Name: switch_temp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE switch_temp (
- switch integer,
- temp integer,
- "time" timestamp with time zone
-);
-
-
-ALTER TABLE switch_temp OWNER TO nms;
-
---
--- Name: switches; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE switches (
- switch integer DEFAULT nextval(('"switches_switch_seq"'::text)::regclass) NOT NULL,
- mgmt_v4_addr inet,
- sysname character varying NOT NULL,
- switchtype character varying DEFAULT 'ex2200'::character varying NOT NULL,
- last_updated timestamp with time zone,
- locked boolean DEFAULT false NOT NULL,
- poll_frequency interval DEFAULT '00:01:00'::interval NOT NULL,
- community character varying DEFAULT 'FullPuppTilNMS'::character varying NOT NULL,
- lldp_chassis_id character varying,
- mgmt_v6_addr inet,
- placement box,
- subnet4 cidr,
- subnet6 cidr,
- distro_name character varying,
- distro_phy_port character varying(100),
- mgmt_v6_gw inet,
- mgmt_v4_gw inet,
- mgmt_vlan integer DEFAULT 666,
- traffic_vlan integer,
- last_config_fetch timestamp with time zone,
- current_mac macaddr
-);
-
-
-ALTER TABLE switches OWNER TO nms;
-
---
--- Name: switches_switch_seq; Type: SEQUENCE; Schema: public; Owner: nms
---
-
-CREATE SEQUENCE switches_switch_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
-ALTER TABLE switches_switch_seq OWNER TO nms;
-
---
--- Name: test_table; Type: TABLE; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE TABLE test_table (
- test timestamp with time zone
-);
-
-
-ALTER TABLE test_table OWNER TO nms;
-
---
--- Name: linknet; Type: DEFAULT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY linknets ALTER COLUMN linknet SET DEFAULT nextval('linknets_linknet_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclass);
-
-
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY switch_comments ALTER COLUMN id SET DEFAULT nextval('switch_comments_id_seq'::regclass);
-
-
---
--- Name: polls_time_switch_ifname_key; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY polls
- ADD CONSTRAINT polls_time_switch_ifname_key UNIQUE ("time", switch, ifname);
-
-
---
--- Name: seen_mac_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY seen_mac
- ADD CONSTRAINT seen_mac_pkey PRIMARY KEY (mac, address, seen);
-
-
---
--- Name: switch_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY switch_comments
- ADD CONSTRAINT switch_comments_pkey PRIMARY KEY (id);
-
-
---
--- Name: switches_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY switches
- ADD CONSTRAINT switches_pkey PRIMARY KEY (switch);
-
-
---
--- Name: switches_sysname_key; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY switches
- ADD CONSTRAINT switches_sysname_key UNIQUE (sysname);
-
-
---
--- Name: switches_sysname_key1; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:
---
-
-ALTER TABLE ONLY switches
- ADD CONSTRAINT switches_sysname_key1 UNIQUE (sysname);
-
-
---
--- Name: dhcp_ip; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX dhcp_ip ON dhcp USING btree (ip);
-
-
---
--- Name: dhcp_mac; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX dhcp_mac ON dhcp USING btree (mac);
-
-
---
--- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX dhcp_switch ON dhcp USING btree (switch);
-
-
---
--- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX dhcp_time ON dhcp USING btree ("time");
-
-
---
--- Name: ping_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX ping_index ON ping USING btree ("time");
-
-
---
--- Name: ping_secondary_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX ping_secondary_index ON ping_secondary_ip USING btree ("time");
-
-
---
--- Name: polls_ifname; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX polls_ifname ON polls USING btree (ifname);
-
-
---
--- Name: polls_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX polls_switch ON polls USING btree (switch);
-
-
---
--- Name: polls_switch_ifname; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX polls_switch_ifname ON polls USING btree (switch, ifname);
-
-
---
--- Name: polls_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX polls_time ON polls USING btree ("time");
-
-
---
--- Name: seen_mac_addr_family; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX seen_mac_addr_family ON seen_mac USING btree (family(address));
-
-
---
--- Name: seen_mac_seen; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen);
-
-
---
--- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX snmp_time ON snmp USING btree ("time");
-
-
---
--- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX snmp_time15 ON snmp USING btree (id, switch);
-
-
---
--- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch);
-
-
---
--- Name: switch_temp_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX switch_temp_index ON switch_temp USING btree (switch);
-
-
---
--- Name: switches_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX switches_switch ON switches USING hash (switch);
-
-
---
--- Name: updated_index2; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX updated_index2 ON linknet_ping USING btree ("time");
-
-
---
--- Name: updated_index3; Type: INDEX; Schema: public; Owner: nms; Tablespace:
---
-
-CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time");
-
-
---
--- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY dhcp
- ADD CONSTRAINT dhcp_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
--- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY snmp
- ADD CONSTRAINT snmp_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
--- Name: switchname; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY polls
- ADD CONSTRAINT switchname FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
--- Name: switchname; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY ping
- ADD CONSTRAINT switchname FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
--- Name: switchname; Type: FK CONSTRAINT; Schema: public; Owner: nms
---
-
-ALTER TABLE ONLY switch_comments
- ADD CONSTRAINT switchname FOREIGN KEY (switch) REFERENCES switches(switch);
-
-
---
--- Name: public; Type: ACL; Schema: -; Owner: postgres
---
-
-REVOKE ALL ON SCHEMA public FROM PUBLIC;
-REVOKE ALL ON SCHEMA public FROM postgres;
-GRANT ALL ON SCHEMA public TO postgres;
-GRANT ALL ON SCHEMA public TO PUBLIC;
-GRANT ALL ON SCHEMA public TO fap;
-
-
---
--- Name: dhcp; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE dhcp FROM PUBLIC;
-REVOKE ALL ON TABLE dhcp FROM nms;
-GRANT ALL ON TABLE dhcp TO nms;
-GRANT ALL ON TABLE dhcp TO fap;
-
-
---
--- Name: linknet_ping; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE linknet_ping FROM PUBLIC;
-REVOKE ALL ON TABLE linknet_ping FROM nms;
-GRANT ALL ON TABLE linknet_ping TO nms;
-GRANT ALL ON TABLE linknet_ping TO fap;
-
-
---
--- Name: linknets; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE linknets FROM PUBLIC;
-REVOKE ALL ON TABLE linknets FROM nms;
-GRANT ALL ON TABLE linknets TO nms;
-GRANT ALL ON TABLE linknets TO fap;
-
-
---
--- Name: ping; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE ping FROM PUBLIC;
-REVOKE ALL ON TABLE ping FROM nms;
-GRANT ALL ON TABLE ping TO nms;
-GRANT ALL ON TABLE ping TO fap;
-
-
---
--- Name: ping_secondary_ip; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE ping_secondary_ip FROM PUBLIC;
-REVOKE ALL ON TABLE ping_secondary_ip FROM nms;
-GRANT ALL ON TABLE ping_secondary_ip TO nms;
-GRANT ALL ON TABLE ping_secondary_ip TO fap;
-
-
---
--- Name: polls; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE polls FROM PUBLIC;
-REVOKE ALL ON TABLE polls FROM nms;
-GRANT ALL ON TABLE polls TO nms;
-GRANT ALL ON TABLE polls TO fap;
-
-
---
--- Name: seen_mac; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE seen_mac FROM PUBLIC;
-REVOKE ALL ON TABLE seen_mac FROM nms;
-GRANT ALL ON TABLE seen_mac TO nms;
-GRANT ALL ON TABLE seen_mac TO fap;
-
-
---
--- Name: snmp; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE snmp FROM PUBLIC;
-REVOKE ALL ON TABLE snmp FROM nms;
-GRANT ALL ON TABLE snmp TO nms;
-GRANT ALL ON TABLE snmp TO postgres;
-GRANT ALL ON TABLE snmp TO fap;
-
-
---
--- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON SEQUENCE snmp_id_seq FROM PUBLIC;
-REVOKE ALL ON SEQUENCE snmp_id_seq FROM nms;
-GRANT ALL ON SEQUENCE snmp_id_seq TO nms;
-GRANT ALL ON SEQUENCE snmp_id_seq TO postgres;
-
-
---
--- Name: switch_comments; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE switch_comments FROM PUBLIC;
-REVOKE ALL ON TABLE switch_comments FROM nms;
-GRANT ALL ON TABLE switch_comments TO nms;
-GRANT ALL ON TABLE switch_comments TO fap;
-
-
---
--- Name: switch_temp; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE switch_temp FROM PUBLIC;
-REVOKE ALL ON TABLE switch_temp FROM nms;
-GRANT ALL ON TABLE switch_temp TO nms;
-GRANT ALL ON TABLE switch_temp TO fap;
-
-
---
--- Name: switches; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE switches FROM PUBLIC;
-REVOKE ALL ON TABLE switches FROM nms;
-GRANT ALL ON TABLE switches TO nms;
-GRANT ALL ON TABLE switches TO fap;
-
-
---
--- Name: test_table; Type: ACL; Schema: public; Owner: nms
---
-
-REVOKE ALL ON TABLE test_table FROM PUBLIC;
-REVOKE ALL ON TABLE test_table FROM nms;
-GRANT ALL ON TABLE test_table TO nms;
-GRANT ALL ON TABLE test_table TO fap;
-
-
---
--- PostgreSQL database dump complete
---
-
diff --git a/nms/pg_hba.conf b/nms/pg_hba.conf
deleted file mode 100644
index 9b23a31..0000000
--- a/nms/pg_hba.conf
+++ /dev/null
@@ -1,118 +0,0 @@
-# PostgreSQL Client Authentication Configuration File
-# ===================================================
-#
-# Refer to the "Client Authentication" section in the PostgreSQL
-# documentation for a complete description of this file. A short
-# synopsis follows.
-#
-# This file controls: which hosts are allowed to connect, how clients
-# are authenticated, which PostgreSQL user names they can use, which
-# databases they can access. Records take one of these forms:
-#
-# local DATABASE USER METHOD [OPTIONS]
-# host DATABASE USER ADDRESS METHOD [OPTIONS]
-# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
-# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
-#
-# (The uppercase items must be replaced by actual values.)
-#
-# The first field is the connection type: "local" is a Unix-domain
-# socket, "host" is either a plain or SSL-encrypted TCP/IP socket,
-# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a
-# plain TCP/IP socket.
-#
-# DATABASE can be "all", "sameuser", "samerole", "replication", a
-# database name, or a comma-separated list thereof. The "all"
-# keyword does not match "replication". Access to replication
-# must be enabled in a separate record (see example below).
-#
-# USER can be "all", a user name, a group name prefixed with "+", or a
-# comma-separated list thereof. In both the DATABASE and USER fields
-# you can also write a file name prefixed with "@" to include names
-# from a separate file.
-#
-# ADDRESS specifies the set of hosts the record matches. It can be a
-# host name, or it is made up of an IP address and a CIDR mask that is
-# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that
-# specifies the number of significant bits in the mask. A host name
-# that starts with a dot (.) matches a suffix of the actual host name.
-# Alternatively, you can write an IP address and netmask in separate
-# columns to specify the set of hosts. Instead of a CIDR-address, you
-# can write "samehost" to match any of the server's own IP addresses,
-# or "samenet" to match any address in any subnet that the server is
-# directly connected to.
-#
-# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
-# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
-# "password" sends passwords in clear text; "md5" is preferred since
-# it sends encrypted passwords.
-#
-# OPTIONS are a set of options for the authentication in the format
-# NAME=VALUE. The available options depend on the different
-# authentication methods -- refer to the "Client Authentication"
-# section in the documentation for a list of which options are
-# available for which authentication methods.
-#
-# Database and user names containing spaces, commas, quotes and other
-# special characters must be quoted. Quoting one of the keywords
-# "all", "sameuser", "samerole" or "replication" makes the name lose
-# its special character, and just match a database or username with
-# that name.
-#
-# This file is read on server startup and when the postmaster receives
-# a SIGHUP signal. If you edit the file on a running system, you have
-# to SIGHUP the postmaster for the changes to take effect. You can
-# use "pg_ctl reload" to do that.
-
-# Put your actual configuration here
-# ----------------------------------
-#
-# If you want to allow non-local connections, you need to add more
-# "host" records. In that case you will also need to make PostgreSQL
-# listen on a non-local interface via the listen_addresses
-# configuration parameter, or via the -i or -h command line switches.
-
-
-
-
-# DO NOT DISABLE!
-# If you change this first entry you will need to make sure that the
-# database superuser can access the database using some other method.
-# Noninteractive access to all databases is required during automatic
-# maintenance (custom daily cronjobs, replication, and similar tasks).
-#
-# Database administrative login by Unix domain socket
-local all postgres peer
-
-# TYPE DATABASE USER ADDRESS METHOD
-
-# "local" is for Unix domain socket connections only
-local all all peer
-# IPv4 local connections:
-host all all 127.0.0.1/32 md5
-# IPv6 local connections:
-host all all ::1/128 md5
-
-host nms nms 172.17.0.0/16 md5
-
-# NOC-nett
-host nms nms 185.110.150.0/25 md5
-host nms nms 2a06:5841:150a::0/64 md5
-
-host nms fap 185.110.150.0/25 md5
-host nms fap 2a06:5841:150a::0/64 md5
-
-# Server-nett
-host nms nms 185.110.148.0/26 md5
-host nms nms 2a06:5841:1337::0/64 md5
-
-host nms fap 185.110.148.0/26 md5
-host nms fap 2a06:5841:1337::0/64 md5
-# r2-d2 med mer
-host nms nms 185.110.149.0/26 md5
-
-# Allow replication connections from localhost, by a user with the
-# replication privilege.
-#local replication postgres peer
-#host replication postgres 127.0.0.1/32 md5
-#host replication postgres ::1/128 md5
diff --git a/nms/postgresql.conf b/nms/postgresql.conf
deleted file mode 100644
index 5ae771a..0000000
--- a/nms/postgresql.conf
+++ /dev/null
@@ -1,616 +0,0 @@
-# -----------------------------
-# PostgreSQL configuration file
-# -----------------------------
-#
-# This file consists of lines of the form:
-#
-# name = value
-#
-# (The "=" is optional.) Whitespace may be used. Comments are introduced with
-# "#" anywhere on a line. The complete list of parameter names and allowed
-# values can be found in the PostgreSQL documentation.
-#
-# The commented-out settings shown in this file represent the default values.
-# Re-commenting a setting is NOT sufficient to revert it to the default value;
-# you need to reload the server.
-#
-# This file is read on server startup and when the server receives a SIGHUP
-# signal. If you edit the file on a running system, you have to SIGHUP the
-# server for the changes to take effect, or use "pg_ctl reload". Some
-# parameters, which are marked below, require a server shutdown and restart to
-# take effect.
-#
-# Any parameter can also be given as a command-line option to the server, e.g.,
-# "postgres -c log_connections=on". Some parameters can be changed at run time
-# with the "SET" SQL command.
-#
-# Memory units: kB = kilobytes Time units: ms = milliseconds
-# MB = megabytes s = seconds
-# GB = gigabytes min = minutes
-# TB = terabytes h = hours
-# d = days
-
-
-#------------------------------------------------------------------------------
-# FILE LOCATIONS
-#------------------------------------------------------------------------------
-
-# The default values of these variables are driven from the -D command-line
-# option or PGDATA environment variable, represented here as ConfigDir.
-
-data_directory = '/var/lib/postgresql/9.4/main' # use data in another directory
- # (change requires restart)
-hba_file = '/etc/postgresql/9.4/main/pg_hba.conf' # host-based authentication file
- # (change requires restart)
-ident_file = '/etc/postgresql/9.4/main/pg_ident.conf' # ident configuration file
- # (change requires restart)
-
-# If external_pid_file is not explicitly set, no extra PID file is written.
-external_pid_file = '/var/run/postgresql/9.4-main.pid' # write an extra PID file
- # (change requires restart)
-
-
-#------------------------------------------------------------------------------
-# CONNECTIONS AND AUTHENTICATION
-#------------------------------------------------------------------------------
-
-# - Connection Settings -
-
-#listen_addresses = 'localhost' # what IP address(es) to listen on;
- # comma-separated list of addresses;
- # defaults to 'localhost'; use '*' for all
- # (change requires restart)
-listen_addresses = '*'
-port = 5432 # (change requires restart)
-max_connections = 50 # (change requires restart)
-# Note: Increasing max_connections costs ~400 bytes of shared memory per
-# connection slot, plus lock space (see max_locks_per_transaction).
-#superuser_reserved_connections = 3 # (change requires restart)
-unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
- # (change requires restart)
-#unix_socket_group = '' # (change requires restart)
-#unix_socket_permissions = 0777 # begin with 0 to use octal notation
- # (change requires restart)
-#bonjour = off # advertise server via Bonjour
- # (change requires restart)
-#bonjour_name = '' # defaults to the computer name
- # (change requires restart)
-
-# - Security and Authentication -
-
-#authentication_timeout = 1min # 1s-600s
-ssl = true # (change requires restart)
-#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
- # (change requires restart)
-#ssl_prefer_server_ciphers = on # (change requires restart)
-#ssl_ecdh_curve = 'prime256v1' # (change requires restart)
-#ssl_renegotiation_limit = 0 # amount of data between renegotiations
-ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem' # (change requires restart)
-ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key' # (change requires restart)
-#ssl_ca_file = '' # (change requires restart)
-#ssl_crl_file = '' # (change requires restart)
-#password_encryption = on
-#db_user_namespace = off
-
-# GSSAPI using Kerberos
-#krb_server_keyfile = ''
-#krb_caseins_users = off
-
-# - TCP Keepalives -
-# see "man 7 tcp" for details
-
-#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
- # 0 selects the system default
-#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
- # 0 selects the system default
-#tcp_keepalives_count = 0 # TCP_KEEPCNT;
- # 0 selects the system default
-
-
-#------------------------------------------------------------------------------
-# RESOURCE USAGE (except WAL)
-#------------------------------------------------------------------------------
-
-# - Memory -
-
-shared_buffers = 2GB # min 128kB
- # (change requires restart)
-#huge_pages = try # on, off, or try
- # (change requires restart)
-temp_buffers = 32MB # min 800kB
-#max_prepared_transactions = 0 # zero disables the feature
- # (change requires restart)
-# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
-# per transaction slot, plus lock space (see max_locks_per_transaction).
-# It is not advisable to set max_prepared_transactions nonzero unless you
-# actively intend to use prepared transactions.
-work_mem = 16MB # min 64kB
-maintenance_work_mem = 256MB # min 1MB
-#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
-#max_stack_depth = 2MB # min 100kB
-dynamic_shared_memory_type = posix # the default is the first option
- # supported by the operating system:
- # posix
- # sysv
- # windows
- # mmap
- # use none to disable dynamic shared memory
-
-# - Disk -
-
-#temp_file_limit = -1 # limits per-session temp file space
- # in kB, or -1 for no limit
-
-# - Kernel Resource Usage -
-
-#max_files_per_process = 1000 # min 25
- # (change requires restart)
-shared_preload_libraries = '' # (change requires restart)
-
-# - Cost-Based Vacuum Delay -
-
-#vacuum_cost_delay = 0 # 0-100 milliseconds
-#vacuum_cost_page_hit = 1 # 0-10000 credits
-#vacuum_cost_page_miss = 10 # 0-10000 credits
-#vacuum_cost_page_dirty = 20 # 0-10000 credits
-#vacuum_cost_limit = 200 # 1-10000 credits
-
-# - Background Writer -
-
-#bgwriter_delay = 200ms # 10-10000ms between rounds
-#bgwriter_lru_maxpages = 100 # 0-1000 max buffers written/round
-#bgwriter_lru_multiplier = 2.0 # 0-10.0 multipler on buffers scanned/round
-
-# - Asynchronous Behavior -
-
-#effective_io_concurrency = 1 # 1-1000; 0 disables prefetching
-#max_worker_processes = 8
-
-
-#------------------------------------------------------------------------------
-# WRITE AHEAD LOG
-#------------------------------------------------------------------------------
-
-# - Settings -
-
-wal_level = archive # minimal, archive, hot_standby, or logical
- # (change requires restart)
-#fsync = on # turns forced synchronization on or off
-#synchronous_commit = on # synchronization level;
- # off, local, remote_write, or on
-#wal_sync_method = fsync # the default is the first option
- # supported by the operating system:
- # open_datasync
- # fdatasync (default on Linux)
- # fsync
- # fsync_writethrough
- # open_sync
-#full_page_writes = on # recover from partial page writes
-#wal_log_hints = off # also do full page writes of non-critical updates
- # (change requires restart)
-#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
- # (change requires restart)
-#wal_writer_delay = 200ms # 1-10000 milliseconds
-
-#commit_delay = 0 # range 0-100000, in microseconds
-#commit_siblings = 5 # range 1-1000
-
-# - Checkpoints -
-
-#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
-#checkpoint_timeout = 5min # range 30s-1h
-#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
-#checkpoint_warning = 30s # 0 disables
-
-# - Archiving -
-
-#archive_mode = off # allows archiving to be done
- # (change requires restart)
-#archive_command = '' # command to use to archive a logfile segment
- # placeholders: %p = path of file to archive
- # %f = file name only
- # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
-#archive_timeout = 0 # force a logfile segment switch after this
- # number of seconds; 0 disables
-
-
-#------------------------------------------------------------------------------
-# REPLICATION
-#------------------------------------------------------------------------------
-
-# - Sending Server(s) -
-
-# Set these on the master and on any standby that will send replication data.
-
-#max_wal_senders = 0 # max number of walsender processes
- # (change requires restart)
-#wal_keep_segments = 0 # in logfile segments, 16MB each; 0 disables
-#wal_sender_timeout = 60s # in milliseconds; 0 disables
-
-#max_replication_slots = 0 # max number of replication slots
- # (change requires restart)
-
-# - Master Server -
-
-# These settings are ignored on a standby server.
-
-#synchronous_standby_names = '' # standby servers that provide sync rep
- # comma-separated list of application_name
- # from standby(s); '*' = all
-#vacuum_defer_cleanup_age = 0 # number of xacts by which cleanup is delayed
-
-# - Standby Servers -
-
-# These settings are ignored on a master server.
-
-#hot_standby = off # "on" allows queries during recovery
- # (change requires restart)
-#max_standby_archive_delay = 30s # max delay before canceling queries
- # when reading WAL from archive;
- # -1 allows indefinite delay
-#max_standby_streaming_delay = 30s # max delay before canceling queries
- # when reading streaming WAL;
- # -1 allows indefinite delay
-#wal_receiver_status_interval = 10s # send replies at least this often
- # 0 disables
-#hot_standby_feedback = off # send info from standby to prevent
- # query conflicts
-#wal_receiver_timeout = 60s # time that receiver waits for
- # communication from master
- # in milliseconds; 0 disables
-
-
-#------------------------------------------------------------------------------
-# QUERY TUNING
-#------------------------------------------------------------------------------
-
-# - Planner Method Configuration -
-
-#enable_bitmapscan = on
-#enable_hashagg = on
-#enable_hashjoin = on
-#enable_indexscan = on
-#enable_indexonlyscan = on
-#enable_material = on
-#enable_mergejoin = on
-#enable_nestloop = on
-#enable_seqscan = on
-#enable_sort = on
-#enable_tidscan = on
-
-# - Planner Cost Constants -
-
-#seq_page_cost = 1.0 # measured on an arbitrary scale
-#random_page_cost = 4.0 # same scale as above
-#cpu_tuple_cost = 0.01 # same scale as above
-#cpu_index_tuple_cost = 0.005 # same scale as above
-#cpu_operator_cost = 0.0025 # same scale as above
-#effective_cache_size = 4GB
-
-# - Genetic Query Optimizer -
-
-#geqo = on
-#geqo_threshold = 12
-#geqo_effort = 5 # range 1-10
-#geqo_pool_size = 0 # selects default based on effort
-#geqo_generations = 0 # selects default based on effort
-#geqo_selection_bias = 2.0 # range 1.5-2.0
-#geqo_seed = 0.0 # range 0.0-1.0
-
-# - Other Planner Options -
-
-#default_statistics_target = 100 # range 1-10000
-#constraint_exclusion = partition # on, off, or partition
-#cursor_tuple_fraction = 0.1 # range 0.0-1.0
-#from_collapse_limit = 8
-#join_collapse_limit = 8 # 1 disables collapsing of explicit
- # JOIN clauses
-
-
-#------------------------------------------------------------------------------
-# ERROR REPORTING AND LOGGING
-#------------------------------------------------------------------------------
-
-# - Where to Log -
-
-#log_destination = 'stderr' # Valid values are combinations of
- # stderr, csvlog, syslog, and eventlog,
- # depending on platform. csvlog
- # requires logging_collector to be on.
-
-# This is used when logging to stderr:
-#logging_collector = off # Enable capturing of stderr and csvlog
- # into log files. Required to be on for
- # csvlogs.
- # (change requires restart)
-
-# These are only used if logging_collector is on:
-#log_directory = 'pg_log' # directory where log files are written,
- # can be absolute or relative to PGDATA
-#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
- # can include strftime() escapes
-#log_file_mode = 0600 # creation mode for log files,
- # begin with 0 to use octal notation
-#log_truncate_on_rotation = off # If on, an existing log file with the
- # same name as the new log file will be
- # truncated rather than appended to.
- # But such truncation only occurs on
- # time-driven rotation, not on restarts
- # or size-driven rotation. Default is
- # off, meaning append to existing files
- # in all cases.
-#log_rotation_age = 1d # Automatic rotation of logfiles will
- # happen after that time. 0 disables.
-#log_rotation_size = 10MB # Automatic rotation of logfiles will
- # happen after that much log output.
- # 0 disables.
-
-# These are relevant when logging to syslog:
-#syslog_facility = 'LOCAL0'
-#syslog_ident = 'postgres'
-
-# This is only relevant when logging to eventlog (win32):
-#event_source = 'PostgreSQL'
-
-# - When to Log -
-
-#client_min_messages = notice # values in order of decreasing detail:
- # debug5
- # debug4
- # debug3
- # debug2
- # debug1
- # log
- # notice
- # warning
- # error
-
-#log_min_messages = warning # values in order of decreasing detail:
- # debug5
- # debug4
- # debug3
- # debug2
- # debug1
- # info
- # notice
- # warning
- # error
- # log
- # fatal
- # panic
-
-#log_min_error_statement = error # values in order of decreasing detail:
- # debug5
- # debug4
- # debug3
- # debug2
- # debug1
- # info
- # notice
- # warning
- # error
- # log
- # fatal
- # panic (effectively off)
-
-log_min_duration_statement = 2000 # -1 is disabled, 0 logs all statements
- # and their durations, > 0 logs only
- # statements running at least this number
- # of milliseconds
-
-
-# - What to Log -
-
-#debug_print_parse = off
-#debug_print_rewritten = off
-#debug_print_plan = off
-#debug_pretty_print = on
-#log_checkpoints = off
-#log_connections = off
-#log_disconnections = off
-#log_duration = off
-#log_error_verbosity = default # terse, default, or verbose messages
-#log_hostname = off
-log_line_prefix = '%t [%p-%l] %q%u@%d ' # special values:
- # %a = application name
- # %u = user name
- # %d = database name
- # %r = remote host and port
- # %h = remote host
- # %p = process ID
- # %t = timestamp without milliseconds
- # %m = timestamp with milliseconds
- # %i = command tag
- # %e = SQL state
- # %c = session ID
- # %l = session line number
- # %s = session start timestamp
- # %v = virtual transaction ID
- # %x = transaction ID (0 if none)
- # %q = stop here in non-session
- # processes
- # %% = '%'
- # e.g. '<%u%%%d> '
-#log_lock_waits = off # log lock waits >= deadlock_timeout
-#log_statement = 'none' # none, ddl, mod, all
-#log_temp_files = -1 # log temporary files equal or larger
- # than the specified size in kilobytes;
- # -1 disables, 0 logs all temp files
-log_timezone = 'UTC'
-
-
-#------------------------------------------------------------------------------
-# RUNTIME STATISTICS
-#------------------------------------------------------------------------------
-
-# - Query/Index Statistics Collector -
-
-#track_activities = on
-#track_counts = on
-#track_io_timing = off
-#track_functions = none # none, pl, all
-#track_activity_query_size = 1024 # (change requires restart)
-#update_process_title = on
-stats_temp_directory = '/var/run/postgresql/9.4-main.pg_stat_tmp'
-
-
-# - Statistics Monitoring -
-
-#log_parser_stats = off
-#log_planner_stats = off
-#log_executor_stats = off
-#log_statement_stats = off
-
-
-#------------------------------------------------------------------------------
-# AUTOVACUUM PARAMETERS
-#------------------------------------------------------------------------------
-
-#autovacuum = on # Enable autovacuum subprocess? 'on'
- # requires track_counts to also be on.
-#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
- # their durations, > 0 logs only
- # actions running at least this number
- # of milliseconds.
-#autovacuum_max_workers = 3 # max number of autovacuum subprocesses
- # (change requires restart)
-#autovacuum_naptime = 1min # time between autovacuum runs
-#autovacuum_vacuum_threshold = 50 # min number of row updates before
- # vacuum
-#autovacuum_analyze_threshold = 50 # min number of row updates before
- # analyze
-#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
-#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
-#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
- # (change requires restart)
-#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
- # before forced vacuum
- # (change requires restart)
-#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for
- # autovacuum, in milliseconds;
- # -1 means use vacuum_cost_delay
-#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
- # autovacuum, -1 means use
- # vacuum_cost_limit
-
-
-#------------------------------------------------------------------------------
-# CLIENT CONNECTION DEFAULTS
-#------------------------------------------------------------------------------
-
-# - Statement Behavior -
-
-#search_path = '"$user",public' # schema names
-#default_tablespace = '' # a tablespace name, '' uses the default
-#temp_tablespaces = '' # a list of tablespace names, '' uses
- # only default tablespace
-#check_function_bodies = on
-#default_transaction_isolation = 'read committed'
-#default_transaction_read_only = off
-#default_transaction_deferrable = off
-#session_replication_role = 'origin'
-#statement_timeout = 0 # in milliseconds, 0 is disabled
-#lock_timeout = 0 # in milliseconds, 0 is disabled
-#vacuum_freeze_min_age = 50000000
-#vacuum_freeze_table_age = 150000000
-#vacuum_multixact_freeze_min_age = 5000000
-#vacuum_multixact_freeze_table_age = 150000000
-#bytea_output = 'hex' # hex, escape
-#xmlbinary = 'base64'
-#xmloption = 'content'
-#gin_fuzzy_search_limit = 0
-
-# - Locale and Formatting -
-
-datestyle = 'iso, mdy'
-#intervalstyle = 'postgres'
-timezone = 'UTC'
-#timezone_abbreviations = 'Default' # Select the set of available time zone
- # abbreviations. Currently, there are
- # Default
- # Australia (historical usage)
- # India
- # You can create your own file in
- # share/timezonesets/.
-#extra_float_digits = 0 # min -15, max 3
-#client_encoding = sql_ascii # actually, defaults to database
- # encoding
-
-# These settings are initialized by initdb, but they can be changed.
-lc_messages = 'en_US.utf8' # locale for system error message
- # strings
-lc_monetary = 'en_US.utf8' # locale for monetary formatting
-lc_numeric = 'en_US.utf8' # locale for number formatting
-lc_time = 'en_US.utf8' # locale for time formatting
-
-# default configuration for text search
-default_text_search_config = 'pg_catalog.english'
-
-# - Other Defaults -
-
-#dynamic_library_path = '$libdir'
-#local_preload_libraries = ''
-#session_preload_libraries = ''
-
-
-#------------------------------------------------------------------------------
-# LOCK MANAGEMENT
-#------------------------------------------------------------------------------
-
-#deadlock_timeout = 1s
-#max_locks_per_transaction = 64 # min 10
- # (change requires restart)
-# Note: Each lock table slot uses ~270 bytes of shared memory, and there are
-# max_locks_per_transaction * (max_connections + max_prepared_transactions)
-# lock table slots.
-#max_pred_locks_per_transaction = 64 # min 10
- # (change requires restart)
-
-
-#------------------------------------------------------------------------------
-# VERSION/PLATFORM COMPATIBILITY
-#------------------------------------------------------------------------------
-
-# - Previous PostgreSQL Versions -
-
-#array_nulls = on
-#backslash_quote = safe_encoding # on, off, or safe_encoding
-#default_with_oids = off
-#escape_string_warning = on
-#lo_compat_privileges = off
-#quote_all_identifiers = off
-#sql_inheritance = on
-#standard_conforming_strings = on
-#synchronize_seqscans = on
-
-# - Other Platforms and Clients -
-
-#transform_null_equals = off
-
-
-#------------------------------------------------------------------------------
-# ERROR HANDLING
-#------------------------------------------------------------------------------
-
-#exit_on_error = off # terminate session on any error?
-#restart_after_crash = on # reinitialize after backend crash?
-
-
-#------------------------------------------------------------------------------
-# CONFIG FILE INCLUDES
-#------------------------------------------------------------------------------
-
-# These options allow settings to be loaded from files other than the
-# default postgresql.conf.
-
-#include_dir = 'conf.d' # include files ending in '.conf' from
- # directory 'conf.d'
-#include_if_exists = 'exists.conf' # include file only if it exists
-#include = 'special.conf' # include file
-
-
-#------------------------------------------------------------------------------
-# CUSTOMIZED OPTIONS
-#------------------------------------------------------------------------------
-
-# Add settings for extensions here
diff --git a/tech-support/labels/old/README.txt b/tech-support/labels/old/README.txt
deleted file mode 100644
index fa02d44..0000000
--- a/tech-support/labels/old/README.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-Disse filene brukes for � generere merking av kabler og switcher til The Gathering (Eller andre event med lignende behov)
-
-##############
-switch_lables.py:
-##############
-Brukes til � generere lapper som henges opp p� switcher/switchstativer for enkel identifisering.
-
-
-Howto:
-Endre configen i filen (Antall rader, antall switcher, filnavn + eventuell config for Creativia), og kj�r filen med python.
-
-Den lager en HTML fil med valgt navn, som s� kan printes i en vanlig printer.
-
-
-##############
-cable_lables.pl
-##############
-Brukes til � generere teksten til lappene som settes i begge ender av alle kablene i hallen.
-
-CSV-filen mates inn i dymo programvaren og formatteres der. Husk at alle lapper m� skrives ut i to eksemplarer.
-
-Howto:
-Kj�r filen med perl, sett variablene og pipe ut til csv med passende navn.
-
-Variablene filen spiser er f�lgende: Antall rader, antall switcher per rad, antall kabler per switch.
-
-Eksempel:
-
-perl cable_lables.pl 82 4 4 > Lapper.csv
diff --git a/tech-support/labels/old/cable_labels.pl b/tech-support/labels/old/cable_labels.pl
deleted file mode 100644
index b461d03..0000000
--- a/tech-support/labels/old/cable_labels.pl
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-my ($rows, $switches, $cables) = @ARGV;
-
-for my $row (1 .. $rows) {
- next if (!($row & 1));
-
- for my $switch (1 .. $switches) {
- for my $cable (1 .. $cables) {
- print join('-', ($row, $switch, $cable)) . ';' . "\n";
- }
- }
-}
diff --git a/tech-support/labels/old/switch_labels.py b/tech-support/labels/old/switch_labels.py
deleted file mode 100644
index 867c5ab..0000000
--- a/tech-support/labels/old/switch_labels.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/python
-#coding: utf-8
-#
-# @version: 0.1
-# @date: 19.04.2011
-#
-# @description: A quick script to output a html page that prints
-# switch labels in the format: <row>-<switch>
-# i.e: 71-4. One label per page.
-#
-# NB! only makes odd number labels.
-#
-# @author: technocake
-# Found at: blog.technocake.net
-#--------------------------------------------
-
-import sys
-
-######################################
-# Configuration
-######################################
-rows = 84 #rows
-switches = 4 #switches per row
-outFile = "tg-switch-labels-print-me.html"
-
-
-#### CREATIVIA ####
-creative_rows = 12
-creative_prepend = "C"
-
-
-output = ""
-
-# the top of the html page
-def head():
- return """<!Doctype html>
-<html> <head>
-<style>
- div.a4 {
- font-size: 24em;
- text-align: center;
- @page size: A4 landscape;
-
- /* this is the part that makes each div print per page. */
- page-break-after: always;
- }
-</style>
-</head>
-<body>
-"""
-
-#the bottom of the html page
-def tail():
- return "</body></html>"
-
-#ONE switch label
-def a4(s ):
- return "<div class='a4'> %s </div>" % (s, )
-
-
-def saveToFile(data, fileName):
- f = open(fileName, 'w+')
- f.write( data )
- f.close()
-
-# In python 3, raw_input is renamed to input. In python v <3. input does something else.
-# this function fixes that
-def prompt(text):
- try:
- return raw_input(text)
- except:
- try:
- return input(text)
-
- except:
- exit()
-
-
-###################################################
-# This is where the actual generating takes place
-###################################################
-
-
-if __name__ == "__main__":
- output += head()
-
-
- #Generating all the labels for the switches
- for row in range(1, rows+1, 2):
- for SWITCH in range(1, switches+1):
- output += a4("%s-%s\n" % (row, SWITCH) )
-
-
- # Generating all the labels for the CREATIVE area
- for row in range(1, creative_rows+1):
- output += a4("%s-%s\n" % (creative_prepend, row))
-
-
-
- output += tail()
-
- # Taking it out to the big tg-world
-
- if len(sys.argv) > 1:
- #Printing to stdout if second argument is passed to the script
- print ( output )
- else:
- saveToFile(output, outFile)
- #normally, this is what happens. Saving it to a new html file
-
-
- print ( """
- Generated labels for %d switches per row and %d rows. \n
- The html file is in this folder, and is named %s \n
- Pages to print: %d \n\n
- """
- % (switches, rows, outFile, (switches*rows)/2 + creative_rows)
- )
-
- prompt( "Press any key to exit...") \ No newline at end of file
diff --git a/tools/add_switches.txt.pl b/tools/add_switches.txt.pl
deleted file mode 100755
index 635e356..0000000
--- a/tools/add_switches.txt.pl
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/perl
-# Usage: ./add_switches.txt.pl < switches.txt > switches.json
-#
-# Parses switches.txt into json currently just throws it to stdout
-#
-# Actually adding them to a DB comes later.
-
-use strict;
-use warnings;
-use Data::Dumper;
-use lib '../include';
-use JSON;
-use nms::util;
-
-my @switches = parse_switches_txt(*STDIN);
-
-print JSON::XS::encode_json(\@switches);
diff --git a/tools/cubemap-stats.pl b/tools/cubemap-stats.pl
deleted file mode 100755
index 401424a..0000000
--- a/tools/cubemap-stats.pl
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-use POSIX qw(strftime);
-use NetAddr::IP;
-use Net::IP;
-
-my (%streams, %ips, %total);
-$total{count}{c} = 0;
-$total{unique_count}{c} = 0;
-$total{count}{int} = 0;
-$total{unique_count}{int} = 0;
-$total{count}{ext} = 0;
-$total{unique_count}{ext} = 0;
-
-sub stream_name {
- my $stream = shift;
- $stream =~ s/\///g;
- return $stream;
-}
-
-# Is client in the network?
-sub is_in_network{
- my ($ip, $ipv4, $ipv6) = @_;
- my $in_scope = 0;
- my $ipv4_range = NetAddr::IP->new($ipv4);
- my $ipv6_range = NetAddr::IP->new($ipv6);
-
- if (Net::IP->new($ip)->ip_is_ipv4()){
- if (NetAddr::IP->new($ip)->within($ipv4_range)){
- $in_scope = 1;
- }
- } else {
- if (NetAddr::IP->new($ip)->within($ipv6_range)){
- $in_scope = 1;
- }
- }
-
- return $in_scope;
-}
-
-# add count
-sub add_count{
- my ($date, $stream_name, $count_name, $count_type) = @_;
-
- if($streams{$date}{$stream_name}{$count_name}{$count_type}){
- $streams{$date}{$stream_name}{$count_name}{$count_type}++;
- } else {
- $streams{$date}{$stream_name}{$count_name}{$count_type} = 1;
- }
-}
-
-sub print_info{
- foreach my $date (sort keys %streams) {
- print "### $date\n";
- foreach my $stream (sort keys %{$streams{$date}}){
- my $stream_name = stream_name($stream);
- printf "\t%s: %s (%s) - Int: %s (%s), Ext: %s (%s)\n",
- $stream_name,
- $streams{$date}{$stream}{count}{c},
- $streams{$date}{$stream}{unique_count}{c},
- $streams{$date}{$stream}{count}{int},
- $streams{$date}{$stream}{unique_count}{int},
- $streams{$date}{$stream}{count}{ext},
- $streams{$date}{$stream}{unique_count}{ext},
- }
- }
- print "\n\nTotal: $total{count}{c} ($total{unique_count}{c})\n";
- print "Internal: $total{count}{int} ($total{unique_count}{int})\n";
- print "External: $total{count}{ext} ($total{unique_count}{ext})\n";
-}
-
-while (<STDIN>) {
- chomp;
- my ($epoch, $ip, $stream, $connected_time, $bytes_sent, $loss_bytes, $loss_events) = /^(\d+) (\S+) (\S+) (\d+) (\d+) (\d+) (\d+)/ or next;
-
- next if ($stream =~ m/-/);
- next if ($stream =~ m/test/);
-
- my $stream_name = stream_name($stream);
-
- my $date = strftime("%d %b %Y", localtime($epoch));
-
- my $internal = is_in_network($ip, '151.216.128.0/17', '2a02:ed02::/32');
- unless($internal){
- # check server /24
- $internal = is_in_network($ip, '185.12.59.0/24', '2a02:ed02::/32');
- }
-
- print "$date, $stream_name, $ip, $internal\n";
-
- if($ips{$date}{$ip}){
- # already viewed this day
-
- add_count($date, $stream_name, 'count', 'c');
-
- if($internal){
- add_count($date, $stream_name, 'count', 'int');
- $total{count}{int}++;
- } else {
- add_count($date, $stream_name, 'count', 'ext');
- $total{count}{ext}++;
- }
-
- $total{count}{c}++;
- } else {
- # not viewed this day
- $ips{$date}{$ip} = 1;
-
- add_count($date, $stream_name, 'count', 'c');
- add_count($date, $stream_name, 'unique_count', 'c');
-
- if($internal){
- add_count($date, $stream_name, 'count', 'int');
- add_count($date, $stream_name, 'unique_count', 'int');
- $total{count}{int}++;
- $total{unique_count}{int}++;
- } else {
- add_count($date, $stream_name, 'count', 'ext');
- add_count($date, $stream_name, 'unique_count', 'ext');
- $total{count}{ext}++;
- $total{unique_count}{ext}++;
- }
-
- $total{count}{c}++;
- $total{unique_count}{c}++;
- }
-}
-
-print_info(); \ No newline at end of file
diff --git a/tools/deplist.sh b/tools/deplist.sh
deleted file mode 100755
index cd2ecc0..0000000
--- a/tools/deplist.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-# Generate a dependency list for debian packages needed to work
-#
-# This is ... somewhat extensive. And a good incentive for people to clean
-# up their mess.
-
-(
-cat <<_EOF_
-use lib '../include';
-use lib '../web/streamlib';
-_EOF_
-find ../ -name '*pl' -exec egrep '^use ' {} \; | sort | uniq
-cat <<_EOF_
-foreach my \$key (keys %INC) {
- if (\$INC{\$key} =~ m/^\./) {
- next;
- }
- print \$INC{\$key} . "\n";
-}
-_EOF_
-) | perl 2>/dev/null | xargs realpath | xargs dpkg -S | awk '{print $1}' | sed 's/:$//' | sort | uniq
diff --git a/tools/generate-dnsrr.pl b/tools/generate-dnsrr.pl
deleted file mode 100755
index 99ff395..0000000
--- a/tools/generate-dnsrr.pl
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage
-#
-# USAGE:
-# Generate BIND Zone-file data based on the file hosts-to-add.txt
-# cat hosts-to-add.txt | tools/generate-dnsrr.pl
-#
-# Generate input data for nsupdate, to add FORWARD records based on hosts-to-add.txt
-# cat hosts-to-add.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns
-#
-# Generate input data for nsupdate, to add REVERSE records based on hosts-to-add.txt
-# cat hosts-to-add.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -rev
-#
-# Generate input data for nsupdate, to DELETE forward records based on hosts-to-add.txt
-# cat hosts-to-DELETE.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -del
-#
-# Generate input data for nsupdate, to DELETE reverse records based on hosts-to-add.txt
-# cat hosts-to-DELETE.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -rev -del
-#
-# Command-syntax to send this to nsupdate, running it on the DNS server:
-# cat file.txt | tools/generate-dnsrr.pl --dom foo -ns | ssh $dnsserver "nsupdate -k /etc/bind/Kdhcp_updater.+157+XXXXX"
-#
-# Generate DNS for linknets:
-# cat /tmp/linknets.txt | perl -wple 's,;, ,g' | perl tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain tgXX.gathering.org -ns -rev | ssh $dnsserver "nsupdate -k /etc/bind/Kdhcp_updater.XXXXX"
-#
-# Format of input:
-# hostname ipv4-adress ipv6-address
-# If any of ipv4-address or ipv6-address are NOT set for the host, specify "nope"
-# Lines starting with # will (should) be skipped (comments)
-#
-# Example:
-#
-# host1 192.168.0.1 2001:db8:f00::1
-# host2 nope 2001:db8:f00::2
-# host3 192.168.0.3 nope
-# # comment, to be ignored.
-# host4 192.168.0.4
-
-use strict;
-use warnings;
-use lib '..';
-BEGIN {
- require "include/config.pm";
- eval {
- require "include/config.local.pm";
- };
-}
-use Net::IP;
-use Getopt::Long;
-
-my ($delete, $auto, $nsupdate, $reverse, $domain);
-
-if (@ARGV > 0) {
- GetOptions(
- 'del|delete' => \$delete,
- 'a|auto' => \$auto,
- 'ns|nsupdate' => \$nsupdate,
- 'r|reverse' => \$reverse,
- 'domain=s' => \$domain
- )
-}
-
-if ($nsupdate || $reverse){
- unless (defined($domain)){
- print "Missing domain.\n";
- exit 1 unless defined($domain);
- }
-}
-
-$domain = "." . $domain if defined($domain);
-
-print "server $nms::config::pri_v4\n" if ($nsupdate || $reverse);
-
-while (<STDIN>) {
- next if /^(#|\s+$)/; # skip if comment, or blank line
-
- my ($hostname, $ipv4, $ipv6) = split;
- $hostname = lc($hostname);
-
- unless ($ipv6){
- if ($auto){
- # Get IPv6-address based on IPv4-address
-
- my ($first, $second, $third, $fourth) = split('\.', $ipv4);
- # TODO: Need to do some more logic, since base_ipv6net looks like '2a02:ed02::/32'
- #$ipv6 = $nms::config::base_ipv6net . $third . "::" . $fourth;
- }
- }
-
- if ($reverse){
- # print ptr
- print_ptr($hostname, $ipv4, $ipv6);
- } else {
- # print forward
- print_fwd($hostname, $ipv4, $ipv6);
- }
-}
-
-sub print_ptr{
- my ($hostname, $ipv4, $ipv6) = @_;
-
- # IPv4
- unless ( $ipv4 eq "nope" ) {
- my $v4 = new Net::IP($ipv4);
-
- print "update add " . $v4->reverse_ip() . " 3600 IN PTR " . $hostname . $domain .".\n" unless $delete;
- print "update delete " . $v4->reverse_ip() . " IN PTR\n" if $delete;
- print "send\n";
- }
-
- # IPv6
- if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) {
- my $v6 = new Net::IP($ipv6);
-
- print "update add " . $v6->reverse_ip() . " 3600 IN PTR " . $hostname . $domain . ".\n" unless $delete;
- print "update delete " . $v6->reverse_ip() . " IN PTR\n" if $delete;
- print "send\n";
- }
-}
-
-sub print_fwd{
- my ($hostname, $ipv4, $ipv6) = @_;
-
- if ($nsupdate){
-
- unless ( $ipv4 eq "nope" ) {
- # IPv4
- print "prereq nxrrset " . $hostname . $domain . " IN A\n" unless $delete;
- print "update add " . $hostname . $domain . " 3600 IN A $ipv4\n" unless $delete;
- print "update delete " . $hostname . $domain . " IN A\n" if $delete;
- print "send\n";
- }
- if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) {
- # IPv6
- print "prereq nxrrset " . $hostname . $domain . " IN AAAA\n" unless $delete;
- print "update add " . $hostname . $domain . " 3600 IN AAAA $ipv6\n" unless $delete;
- print "update delete " . $hostname . $domain . " IN AAAA\n" if $delete;
- print "send\n";
- }
- } else {
- # IPv4
- unless ( $ipv4 eq "nope" ) {
- printf ("%-24s%s\t%s\t%s\n", $hostname, "IN", "A", $ipv4);
- }
- # IPv6
- if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) {
- printf ("%-24s%s\t%s\t%s\n", $hostname, "IN", "AAAA", $ipv6) if ($ipv6);
- }
- }
-}
diff --git a/tools/generate-rowdns.pl b/tools/generate-rowdns.pl
deleted file mode 100755
index a37c0c8..0000000
--- a/tools/generate-rowdns.pl
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/perl
-use strict;
-
-BEGIN {
- require "include/config.pm";
-}
-
-use JSON -support_by_pp;
-use LWP 5.64;
-use LWP::UserAgent;
-use Net::SSL; # needed, else LWP goes into emo-mode
-use Net::IP;
-use NetAddr::IP;
-use Getopt::Long;
-
-my ($delete, $infra);
-
-if (@ARGV > 0) {
- GetOptions(
- 'del|delete' => \$delete,
- 'infra' => \$infra, # generate switch forward
- )
-}
-
-# Use this to generate nsupdate for all edge switches
-
-# fetch PI API content
-sub get_url{
- my $url = shift;
-
- $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; # just to be sure :-D
- my $ua = LWP::UserAgent->new;
- my $req = HTTP::Request->new(GET => $url);
- $req->authorization_basic($nms::config::gondul_user, $nms::config::gondul_pass);
-
- return $ua->request($req)->content();
-}
-
-my $json_obj = new JSON;
-my $json_content = get_url($nms::config::gondul_url . "/api/read/switches-management");
-
-if($json_content){
- my $json = $json_obj->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode($json_content);
-
- print "server $nms::config::pri_v4\n";
-
- foreach my $switch (values %{$json->{switches}}){
- next unless ($switch->{subnet4}); # require at least IPv4 client subnet
- next unless ($switch->{sysname} =~ m/^e[0-9]+?\-/); # only rows
-
- (my $v4mgmt = $switch->{mgmt_v4_addr}) =~ s/\/[0-9]{1,2}//;
- (my $v6mgmt = $switch->{mgmt_v6_addr}) =~ s/\/[0-9]{1,2}//;
- (my $v4gw = NetAddr::IP->new($switch->{subnet4})->first()) =~ s/\/[0-9]{1,2}//;
- (my $v6gw = NetAddr::IP->new($switch->{subnet6})->first()) =~ s/\/[0-9]{1,2}//;
-
- my $fqdn = $switch->{sysname} . "." . $nms::config::tgname . ".gathering.org.";
- my $sw_fqdn = "sw." . $fqdn;
- my $gw_fqdn = "gw." . $fqdn;
-
- if($infra){
- # Add A and AAAA-records for the switch to the infra.tgNN.gathering.org-zone
- my $sw_infra = $switch->{sysname} . ".infra." . $nms::config::tgname . ".gathering.org.";
- printf ("%-24s%s\t%s\t%s\n", $switch->{sysname}, "IN", "A", $v4mgmt);
- printf ("%-24s%s\t%s\t%s\n", $switch->{sysname}, "IN", "AAAA", $v6mgmt);
- } else {
- # A and AAAA-record to the switch
- if($delete){
- print "update delete $sw_fqdn \t IN A\n";
- print "update delete $sw_fqdn \t IN AAAA\n";
- } else {
- print "update add $sw_fqdn \t 3600 IN A \t $v4mgmt\n";
- print "update add $sw_fqdn \t 3600 IN AAAA \t $v6mgmt\n";
- }
- print "send\n";
-
- # PTR to the switch
- if($delete){
- print "update delete " . Net::IP->new($v4mgmt)->reverse_ip() . " \t IN PTR\n" if $v4mgmt;
- print "send\n" if $v4mgmt;
- print "update delete " . Net::IP->new($v6mgmt)->reverse_ip() . " \t IN PTR\n" if $v6mgmt
- } else {
- print "update add " . Net::IP->new($v4mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n" if $v4mgmt;
- print "send\n" if $v4mgmt;
- print "update add " . Net::IP->new($v6mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n" if $v6mgmt;
- }
- print "send\n";
-
- # A and AAAA-record to the gateway/router
- if($delete){
- print "update delete $gw_fqdn \t IN A\n";
- print "update delete $gw_fqdn \t IN AAAA\n";
- } else {
- print "update add $gw_fqdn \t 3600 IN A \t $v4gw\n" if $v4gw;
- print "update add $gw_fqdn \t 3600 IN AAAA \t $v6gw\n" if $v6gw;
- }
- print "send\n";
-
- # PTR to the gateway/router
- if($delete){
- print "update delete " . Net::IP->new($v4gw)->reverse_ip() . " \t IN PTR\n" if $v4gw;
- print "send\n" if $v4gw;
- print "update delete " . Net::IP->new($v6gw)->reverse_ip() . " \t IN PTR\n" if $v6gw;
- } else {
- print "update add " . Net::IP->new($v4gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n" if $v4gw;
- print "send\n" if $v4gw;
- print "update add " . Net::IP->new($v6gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n" if $v6gw;
- }
- print "send\n";
- }
- }
-}
diff --git a/tools/get_mibs.sh b/tools/get_mibs.sh
deleted file mode 100755
index 7c8cc52..0000000
--- a/tools/get_mibs.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-ORIGPWD=$PWD
-TMP=$(mktemp -d)
-set -x
-set -e
-cd $TMP
-wget ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
-tar xvzf v2.tar.gz --strip-components=2
-mkdir -p mibs
-
-cp v2/* mibs/
-mv mibs ${ORIGPWD}/
-cd ${ORIGPWD}
-rm -rf ${TMP}
diff --git a/tools/lldp/dotnet.sh b/tools/lldp/dotnet.sh
deleted file mode 100755
index 5c1b369..0000000
--- a/tools/lldp/dotnet.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-
-DATE="$(date +%s)"
-if [ -z "$1" ] || [ -z "$2" ]; then
- echo "Usage: $0 <ip> <community>"
- exit 1;
-fi
-./lldpdiscover.pl $1 $2 | ./draw-neighbors.pl | dot -Tpng > dotnet-${DATE}.png
-echo File name: dotnet-${DATE}.png
diff --git a/tools/lldp/draw-neighbors.pl b/tools/lldp/draw-neighbors.pl
deleted file mode 100755
index 323e676..0000000
--- a/tools/lldp/draw-neighbors.pl
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use JSON;
-
-my $in;
-while (<STDIN>) {
- $in .= $_;
-}
-
-my %assets = %{JSON::XS::decode_json($in)};
-
-print "strict graph network {\n";
-while (my ($key, $value) = each %assets) {
- print_tree ($key,0,undef);
-}
-print "}\n";
-
-sub print_tree
-{
- my ($chassis_id,$indent,$parent,$max) = @_;
- if (!defined($parent)) {
- $parent = "";
- }
- if ($indent > 50) {
- die "Possible loop detected.";
- }
- print " \"$assets{$chassis_id}{sysName}\" -- {";
- my @n;
- while (my ($key, $value) = each %{$assets{$chassis_id}{neighbors}}) {
- push @n, "\"$assets{$key}{sysName}\"";
- }
- print join(",",@n) . "};\n";
-}
-
diff --git a/tools/lldp/lldpdiscover.pl b/tools/lldp/lldpdiscover.pl
deleted file mode 100755
index 7ecf969..0000000
--- a/tools/lldp/lldpdiscover.pl
+++ /dev/null
@@ -1,280 +0,0 @@
-#! /usr/bin/perl
-#
-# Basic tool to discover your neighbourhood systems, using LLDP, as seen
-# through SNMP.
-#
-# Usage: ./lldpdiscover.pl <ip> <community>
-#
-# This will connect to <ip> and poll it for SNMP-data, then add that to an
-# asset database. After that's done, we parse the LLDP neighbor table
-# provided over SNMP and add those systems to assets, then try to probe
-# THEM with SNMP, using the same community, and so on.
-#
-# If the entire internet exposed LLDP and SNMP in a public domain, we could
-# theoretically map the whole shebang.
-#
-# Note that leaf nodes do NOT need to reply to SNMP to be added, but
-# without SNMP, there'll obviously be some missing data.
-#
-# The output is a JSON blob of all assets, indexed by chassis id. It also
-# includes a neighbor table for each asset which can be used to generate a
-# map (See dotnet.sh or draw-neighbors.pl for examples). It can also be
-# used to add the assets to NMS.
-#
-# A sensible approach might be to run this periodically, store the results
-# to disk, then have multiple tools parse the results.
-use POSIX;
-use Time::HiRes;
-use strict;
-use warnings;
-use Data::Dumper;
-
-use lib '../../include';
-use nms;
-use nms::snmp;
-
-# Actual assets detected, indexed by chassis ID
-my %assets;
-
-# Tracking arrays. Continue scanning until they are of the same length.
-my @chassis_ids_checked;
-my @chassis_ids_to_check;
-
-# If we are given one switch on the command line, add that and then exit.
-my ($cmdline_ip, $cmdline_community) = @ARGV;
-if (defined($cmdline_ip) && defined($cmdline_community)) {
- my $chassis_id;
- eval {
- # Special-case for the first switch is to fetch chassis id
- # directly. Everything else is fetched from a neighbour
- # table.
- my $session = nms::snmp::snmp_open_session($cmdline_ip, $cmdline_community);
- $chassis_id = get_lldp_chassis_id($session);
- $assets{$chassis_id}{'community'} = $cmdline_community;
- $assets{$chassis_id}{'ip'} = $cmdline_ip;
- push @chassis_ids_to_check, $chassis_id;
- };
- if ($@) {
- mylog("Error during SNMP : $@");
- exit 1;
- }
-
- # Welcome to the main loop!
- while (scalar @chassis_ids_to_check > scalar @chassis_ids_checked) {
- # As long as you call it something else, it's not really a
- # goto-statement, right!?
- OUTER: for my $id (@chassis_ids_to_check) {
- for my $id2 (@chassis_ids_checked) {
- if ($id2 eq $id) {
- next OUTER;
- }
- }
- mylog("Adding $id");
- add_switch($id);
- mylog("Discovering neighbors for $id");
- discover_lldp_neighbors($id);
- push @chassis_ids_checked,$id;
- }
- }
- print JSON::XS::encode_json(\%assets);
- # Creates corrupt output, hooray.
-# print JSON::XS->new->pretty(1)->encode(\%assets);
- exit;
-} else {
- print "RTFSC\n";
-}
-# Filter out stuff we don't scan. Return true if we care about it.
-# XXX: Several of these things are temporary to test (e.g.: AP).
-sub filter {
- my %sys = %{$_[0]};
- if (!defined($sys{'lldpRemSysCapEnabled'})) {
- return 0;
- }
- my %caps = %{$sys{'lldpRemSysCapEnabled'}};
- my $sysdesc = $sys{'lldpRemSysDesc'};
- my $sysname = $sys{'lldpRemSysName'};
-
- if ($caps{'cap_enabled_ap'}) {
- return 1;
- }
- if ($caps{'cap_enabled_telephone'}) {
- return 0;
- }
- if (!defined($sysdesc)) {
- return 1;
- }
- if ($sysdesc =~ /\b(C1530|C3600|C3700)\b/) {
- return 0;
- }
- if (!$caps{'cap_enabled_bridge'} && !$caps{'cap_enabled_router'}) {
- return 1;
- }
- if ($sysname =~ /BCS-OSL/) {
- return 1;
- }
- return 1;
-}
-
-# Discover neighbours of a switch. The data needed is already present int
-# %assets , so this shouldn't cause any extra SNMP requests. It will add
-# new devices as it finds them.
-sub discover_lldp_neighbors {
- my $local_id = $_[0];
- #print "local id: $local_id\n";
- my $ip = $assets{$local_id}{mgmt};
- my $local_sysname = $assets{$local_id}{snmp}{sysName};
- my $community = $assets{$local_id}{community};
- my $addrtable;
- while (my ($key, $value) = each %{$assets{$local_id}{snmp_parsed}}) {
- my $chassis_id = $value->{'lldpRemChassisId'};
- #print "chasis id: $chassis_id\n";
- my $sysname = $value->{'lldpRemSysName'};
- if (!defined($sysname)) {
- $sysname = $chassis_id;
- }
-
- # Do not try to poll servers.
- if (!filter(\%{$value})) {
- mylog("Filtered out $sysname ($local_sysname -> $sysname)");
- next;
- }
- $sysname =~ s/\..*$//;
- if (defined($value->{lldpRemManAddr})) {
- mylog("Found $sysname ($local_sysname -> $sysname )");
- } else {
- next;
- }
- if (defined($assets{$chassis_id}{'sysName'})) {
- mylog("Duplicate $sysname: \"$sysname\" vs \"$assets{$chassis_id}{'sysName'}\"");
- if ($assets{$chassis_id}{'sysName'} eq "") {
- $assets{$chassis_id}{'sysName'} = $sysname;
- }
- } else {
- $assets{$chassis_id}{'sysName'} = $sysname;
- }
-
- # FIXME: We should handle duplicates better and for more
- # than just sysname. These happen every time we are at
- # least one tier down (given A->{B,C,D,E}, switch B, C, D
- # and E will all know about A, thus trigger this). We also
- # want to _add_ information only, since two nodes might
- # know about the same switch, but one might have incomplete
- # information (as is the case when things start up).
-
- # We simply guess that the community is the same as ours.
- $assets{$chassis_id}{'community'} = $community;
- $assets{$chassis_id}{'ip'} = $value->{lldpRemManAddr};
-
- $assets{$chassis_id}{'neighbors'}{$local_id} = 1;
- $assets{$local_id}{'neighbors'}{$chassis_id} = 1;
- check_neigh($chassis_id);
- #print "checking $chassis_id\n";
- }
-}
-
-sub mylog {
- my $msg = shift;
- my $time = POSIX::ctime(time);
- $time =~ s/\n.*$//;
- printf STDERR "[%s] %s\n", $time, $msg;
-}
-
-# Get raw SNMP data for an ip/community.
-# FIXME: This should be seriously improved. Three get()'s and four
-# gettables could definitely be streamlined, but then again, I doubt it
-# matters much unless we start running this tool constantly.
-sub get_snmp_data {
- my ($ip, $community) = @_;
- my %ret = ();
- eval {
- my $session = nms::snmp::snmp_open_session($ip, $community);
- $ret{'sysName'} = $session->get('sysName.0');
- $ret{'sysDescr'} = $session->get('sysDescr.0');
- $ret{'lldpRemManAddrTable'} = $session->gettable("lldpRemManAddrTable");
- $ret{'lldpRemTable'} = $session->gettable("lldpRemTable");
- $ret{'lldpLocChassisIdParsed'} = nms::convert_mac($session->get('lldpLocChassisId.0'));
- $ret{'lldpLocChassisId'} = $session->get('lldpLocChassisId.0');
- #print Dumper(\%ret);
- };
- if ($@) {
- mylog("Error during SNMP to $ip : $@");
- return undef;
- }
- return \%ret;
-}
-
-# Filter raw SNMP data over to something more legible.
-# This is the place to add all post-processed results so all parts of the
-# tool can use them.
-sub parse_snmp
-{
- my $snmp = $_[0];
- my %result = ();
- my %lol = ();
- while (my ($key, $value) = each %{$snmp}) {
- $result{$key} = $value;
- }
- while (my ($key, $value) = each %{$snmp->{lldpRemTable}}) {
- my $chassis_id = nms::convert_mac($value->{'lldpRemChassisId'});
- foreach my $key2 (keys %$value) {
- $lol{$value->{lldpRemIndex}}{$key2} = $value->{$key2};
- }
- $lol{$value->{lldpRemIndex}}{'lldpRemChassisId'} = $chassis_id;
- my %caps = ();
- nms::convert_lldp_caps($value->{'lldpRemSysCapEnabled'}, \%caps);
- $lol{$value->{lldpRemIndex}}{'lldpRemSysCapEnabled'} = \%caps;
- }
- while (my ($key, $value) = each %{$snmp->{lldpRemManAddrTable}}) {
- foreach my $key2 (keys %$value) {
- $lol{$value->{lldpRemIndex}}{$key2} = $value->{$key2};
- }
- my $addr = $value->{'lldpRemManAddr'};
- my $addrtype = $value->{'lldpRemManAddrSubtype'};
- if ($addrtype == 1) {
- $lol{$value->{lldpRemIndex}}{lldpRemManAddr} = nms::convert_ipv4($addr);
- } elsif ($addrtype == 2) {
- $lol{$value->{lldpRemIndex}}{lldpRemManAddr} = nms::convert_ipv6($addr);
- }
- }
- return \%lol;
- print Dumper (\%lol);
-}
-
-# Add a chassis_id to the list to be checked, but only if it isn't there.
-# I'm sure there's some better way to do this, but meh, perl. Doesn't even
-# have half-decent prototypes.
-sub check_neigh {
- my $n = $_[0];
- for my $v (@chassis_ids_to_check) {
- if ($v eq $n) {
- return 0;
- }
- }
- push @chassis_ids_to_check,$n;
- return 1;
-}
-
-# We've got a switch. Populate it with SNMP data (if we can).
-sub add_switch {
- my $chassis_id = shift;
- my $addr;
- my $snmp = undef;
- $addr = $assets{$chassis_id}{'ip'};
- mylog("Probing $addr");
- $snmp = get_snmp_data($addr, $assets{$chassis_id}{'community'});
-
- return if (!defined($snmp));
- my $sysname = $snmp->{sysName};
- $sysname =~ s/\..*$//;
- $assets{$chassis_id}{'sysName'} = $sysname;
- $assets{$chassis_id}{'ip'} = $addr;
- $assets{$chassis_id}{'snmp'} = $snmp;
- $assets{$chassis_id}{'snmp_parsed'} = parse_snmp($snmp);
- return;
-}
-
-sub get_lldp_chassis_id {
- my ($session) = @_;
- my $response = $session->get('lldpLocChassisId.0');
- return nms::convert_mac($response);
-}
diff --git a/tools/make-linknet-hosts.pl b/tools/make-linknet-hosts.pl
deleted file mode 100755
index c00e81b..0000000
--- a/tools/make-linknet-hosts.pl
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl
-use NetAddr::IP;
-use Net::IP;
-use Getopt::Long;
-
-my ($first);
-
-if (@ARGV > 0) {
- GetOptions(
- 'f|first' => \$first,
- )
-}
-
-# Input file format:
-#
-# <ipv4-linknet> <ipv6-linknet> src-router dst-router
-#
-# e.g.
-# 151.216.128.0/31 2a02:ed02:FFFE::0/127 rs1.tele rs1.core
-# 151.216.128.2/31 2a02:ed02:FFFE::2/127 rs1.tele rs1.noc
-
-while (<STDIN>) {
- next if /^(#|\s+$)/; # skip if comment, or blank line
-
- my ($ipv4_raw, $ipv6_raw, $from, $to) = split;
-
- my ($ipv4_first, $ipv4_second, $ipv6_first, $ipv6_second);
- if($ipv6_raw =~ m/nope/){
- $ipv6_first = "nope";
- $ipv6_second = "nope";
- } else {
- my $ipv6 = NetAddr::IP->new($ipv6_raw);
- $ipv6_first = $ipv6->addr();
- $ipv6++;
- $ipv6_second = $ipv6->addr();
- }
-
- if($ipv4_raw =~ m/nope/){
- $ipv4_first = "";
- $ipv4_second = "";
- } else {
- my $ipv4 = NetAddr::IP->new($ipv4_raw);
- $ipv4_first = $ipv4->addr();
- $ipv4++;
- $ipv4_second = $ipv4->addr;
- }
-
-
- # generate-dnsrr.pl format:
- # hostname ipv4 ipv6
- if($first){
- printf("%s %s %s\n", $from, $ipv4_first, $ipv6_first);
- printf("%s %s %s\n", $to, $ipv4_second, $ipv6_second);
- } else {
- printf("%s-%s %s %s\n", $from, $to, $ipv4_first, $ipv6_first);
- printf("%s-%s %s %s\n", $to, $from, $ipv4_second, $ipv6_second);
- }
-}
diff --git a/tools/sql-strip.pl b/tools/sql-strip.pl
deleted file mode 100644
index 0e2fec6..0000000
--- a/tools/sql-strip.pl
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/perl
-use warnings;
-use strict;
-
-my $ignore = "((([0-9a-f]{2}[:]){5}[0-9a-f]{2})|";
-$ignore .= "([0-9]{4}\-[0-9]{2}\-[0-9]{2} [0-9]{2}\:[0-9]{2}\:[0-9]{2})";
-$ignore .= ").*";
-
-my $community = "<removed>";
-my $snmpv3 = 'SHA/<removed>/AES/<removed>';
-
-my $skip = 0;
-
-open (SQL, $ARGV[0]) or die "Unable to open SQL-file";
-while (<SQL>) {
- unless (/^$ignore$/){
-
- if (/COPY (linknet_ping|ping|mbd_log|squeue|temppoll|ap_poll|polls)/){
- $skip = 1;
- print;
- }
-
- if (/\\\./){
- $skip = 0;
- }
-
- unless ($skip){
- s/$community/<removed>/g; # community
- s/PASSWORD '.+'/PASSWORD '<removed>'/g; # password for SQL-users
- s/public$/<removed>/; # public-community -- assuming last column
- #s/$snmpv3/SHA\/<removed>\/AES\/<removed>/g; # snmpv3
- print;
- }
- }
-}
diff --git a/web/etc/apache2/nms-public.tg16.gathering.org.conf b/web/etc/apache2/nms-public.tg16.gathering.org.conf
deleted file mode 100644
index 7e24b5c..0000000
--- a/web/etc/apache2/nms-public.tg16.gathering.org.conf
+++ /dev/null
@@ -1,30 +0,0 @@
-<VirtualHost *:8080>
- ServerAdmin drift@gathering.org
- ServerName nms-public.tg16.gathering.org
- ServerAlias nms-public.tg16.gathering.org
-
- DocumentRoot /srv/tgmanage/web/nms-public.gathering.org
- ScriptAlias /api/public/ /srv/tgmanage/web/nms-public.gathering.org/api/public/
- <Directory "/srv/tgmanage/web/nms-public.gathering.org/api/public/">
- AllowOverride None
- Options +ExecCGI -MultiViews +Indexes +SymLinksIfOwnerMatch
- Require all granted
- </Directory>
- <Directory "/srv/tgmanage/web/nms-public.gathering.org">
- AllowOverride None
- Options Indexes FollowSymLinks MultiViews
- Require all granted
-
- AddDefaultCharset UTF-8
- </Directory>
-
- ErrorLog /var/log/apache2/error-nms-public.tg16.gathering.org.log
-
- # Possible values include: debug, info, notice, warn, error, crit,
- # alert, emerg.
- LogLevel warn
-
- CustomLog /var/log/apache2/access-nms-public.tg16.gathering.org.log combined
- ServerSignature On
-
-</VirtualHost>
diff --git a/web/etc/apache2/nms.tg16.gathering.org.conf b/web/etc/apache2/nms.tg16.gathering.org.conf
deleted file mode 100644
index 08471e0..0000000
--- a/web/etc/apache2/nms.tg16.gathering.org.conf
+++ /dev/null
@@ -1,56 +0,0 @@
-<VirtualHost *:8080>
- ServerAdmin drift@gathering.org
- ServerName nms.tg16.gathering.org
- ServerAlias nms.tg16.gathering.org
-
- DocumentRoot /srv/tgmanage/web/nms.gathering.org
- ScriptAlias /api/write/ /srv/tgmanage/web/nms.gathering.org/api/write/
- ScriptAlias /api/read/ /srv/tgmanage/web/nms.gathering.org/api/read/
- ScriptAlias /api/public/ /srv/tgmanage/web/nms.gathering.org/api/public/
- <Directory "/srv/tgmanage/web/nms.gathering.org/api/write/">
- AllowOverride None
- Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
- <RequireAny>
- AuthUserFile /srv/tgmanage/web/htpasswd-write
- AuthName "Tech:Server Secret Volcano Lair"
- AuthType Basic
- Require valid-user
- </RequireAny>
- </Directory>
- <Directory "/srv/tgmanage/web/nms.gathering.org/api/read/">
- AllowOverride None
- Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
- <RequireAny>
- AuthUserFile /srv/tgmanage/web/htpasswd-read
- AuthName "The Gathering Network Management System"
- AuthType Basic
- Require valid-user
- </RequireAny>
- </Directory>
- <Directory "/srv/tgmanage/web/nms.gathering.org/api/public/">
- AllowOverride None
- Options +ExecCGI -MultiViews +Indexes +SymLinksIfOwnerMatch
- Require all granted
- </Directory>
- <Directory "/srv/tgmanage/web/nms.gathering.org">
- AllowOverride None
- Options Indexes FollowSymLinks MultiViews
- AddDefaultCharset UTF-8
- <RequireAny>
- AuthUserFile /srv/tgmanage/web/htpasswd-read
- AuthName "The Gathering Network Management System"
- AuthType Basic
- Require valid-user
- </RequireAny>
- </Directory>
-
- ErrorLog /var/log/apache2/error-nms.tg16.gathering.org.log
-
- # Possible values include: debug, info, notice, warn, error, crit,
- # alert, emerg.
- LogLevel warn
-
- CustomLog /var/log/apache2/access-nms.tg16.gathering.org.log combined
- ServerSignature On
-
-</VirtualHost>
diff --git a/web/etc/nginx/default.conf b/web/etc/nginx/default.conf
deleted file mode 100644
index 80fc4f3..0000000
--- a/web/etc/nginx/default.conf
+++ /dev/null
@@ -1,331 +0,0 @@
-# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
-
-ssl_dhparam /etc/nginx/dhparam.pem;
-resolver 185.110.149.2 185.110.148.2;
-
-# Yoda!
-server {
- listen 80 default_server;
- listen [::]:80 default_server;
- root /var/www/html;
- # Add index.php to the list if you are using PHP
- index index.html index.htm index.nginx-debian.html;
- add_header Strict-Transport-Security max-age=15768000;
- server_name yoda.tg16.gathering.org;
-
- location /display {
- allow 185.110.148.24;
- allow 2a06:5841:1337::24;
- allow 185.110.148.25;
- allow 2a06:5841:1337::25;
- allow 185.110.148.26;
- allow 2a06:5841:1337::26;
- allow 2a06:5841:150a::/64;
- allow 185.110.150.0/25;
- deny all;
- }
- #location / {
- # return 301 https://$host$request_uri;
- #}
-}
-
-# Munin
-server {
- listen 80;
- listen [::]:80;
- access_log /var/log/nginx/munin.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/munin.tg16.gathering.org_ssl_error.log error;
- root /var/www/html;
-
- server_name munin.tg16.gathering.org;
-
- allow 185.110.150.0/25;
- allow 2a06:5841:150a::/64;
- allow 185.110.149.0/26;
- allow 2a06:5841:149a::/64;
- allow 185.110.148.0/26;
- allow 2a06:5841:1337::/64;
- allow 185.110.151.0/27;
- allow 2a06:5841:151a::/64;
- deny all;
-
- location ^~ /munin-cgi/munin-cgi-graph/ {
- fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
- fastcgi_param PATH_INFO $fastcgi_path_info;
- fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
- include fastcgi_params;
- }
-
-
- location /munin/static/ {
- alias /etc/munin/static/;
- }
-
- location /munin/ {
- fastcgi_split_path_info ^(/munin)(.*);
- fastcgi_param PATH_INFO $fastcgi_path_info;
- fastcgi_pass unix:/var/run/munin/fastcgi-html.sock;
- include fastcgi_params;
-
- rewrite ^/munin/(.*.png)$ /munin-cgi/munin-cgi-graph/$1;
- }
-
- location = / {
- return 301 $scheme://$server_name/munin/;
- }
-}
-
-# Yoda!
-server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- access_log /var/log/nginx/yoda.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/yoda.tg16.gathering.org_ssl_error.log error;
- server_name yoda.tg16.gathering.org;
- add_header Strict-Transport-Security max-age=0;
- add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
- ssl_prefer_server_ciphers on;
- ssl_certificate /root/le/prodcerts/yoda.prod.pem;
- ssl_certificate_key /root/le/keys/domain.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- client_max_body_size 10m;
- ssl_stapling on;
- ssl_stapling_verify on;
- root /var/www/html;
- index index.pl index.html;
- location ~ \.pl|cgi$ {
- try_files $uri =404;
- gzip off;
- fastcgi_pass 127.0.0.1:8999;
- fastcgi_index index.pl;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location / {
- try_files $uri $uri/ =404;
- }
-}
-
-# Webcam
-server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- access_log /var/log/nginx/webcam.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/webcam.tg16.gathering.org_ssl_error.log error;
- server_name webcam.tg16.gathering.org webcams.tg16.gathering.org;
- add_header Strict-Transport-Security max-age=0;
- add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
- ssl_prefer_server_ciphers on;
- ssl_certificate /root/le/prodcerts/yoda.prod.pem;
- ssl_certificate_key /root/le/keys/domain.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- client_max_body_size 10m;
- ssl_stapling on;
- ssl_stapling_verify on;
- root /var/www/webcam;
- location / {
- return 301 http://stream.tg16.gathering.org/;
- #try_files $uri $uri/ =404;
- }
-}
-
-# Stream
-server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- access_log /var/log/nginx/stream.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/stream.tg16.gathering.org_ssl_error.log error;
- server_name stream.tg16.gathering.org streams.tg16.gathering.org;
- #add_header Strict-Transport-Security max-age=15768000;
- add_header Strict-Transport-Security max-age=0;
- #add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
- ssl_prefer_server_ciphers on;
- ssl_certificate /root/le/prodcerts/yoda.prod.pem;
- ssl_certificate_key /root/le/keys/domain.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- client_max_body_size 10m;
- ssl_stapling on;
- ssl_stapling_verify on;
- root /var/www/stream/;
- index index.pl index.html;
- location /hls {
- types {
- #application/vnd.apple.mpegurl m3u8;
- application/x-mpegURL m3u8;
- video/mp2t ts;
- text/html htm;
- }
- root /var/www/;
- add_header Cache-Control no-cache;
- }
- location /stat {
- allow 185.110.150.0/25;
- allow 2a06:5841:150a::/64;
- allow 185.110.149.0/26;
- allow 2a06:5841:149a::/64;
- allow 185.110.148.0/26;
- allow 2a06:5841:1337::/64;
- allow 185.110.151.0/27;
- allow 2a06:5841:151a::/64;
- deny all;
- rtmp_stat all;
- rtmp_stat_stylesheet /stat.xsl;
- }
- location /stat.xsl {
- allow 185.110.150.0/25;
- allow 2a06:5841:150a::/64;
- allow 185.110.149.0/26;
- allow 2a06:5841:149a::/64;
- allow 185.110.148.0/26;
- allow 2a06:5841:1337::/64;
- allow 185.110.151.0/27;
- allow 2a06:5841:151a::/64;
- deny all;
- }
- location ~ \.pl|cgi$ {
- try_files $uri =404;
- gzip off;
- fastcgi_pass 127.0.0.1:8999;
- fastcgi_index index.pl;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location / {
- return 301 http://$host$request_uri;
- #try_files $uri $uri/ =404;
- }
-}
-
-# Stream
-server {
- listen 80;
- listen [::]:80;
- access_log /var/log/nginx/stream.tg16.gathering.org_access.log;
- error_log /var/log/nginx/stream.tg16.gathering.org_error.log error;
- server_name stream.tg16.gathering.org streams.tg16.gathering.org;
- add_header Strict-Transport-Security max-age=0;
- client_max_body_size 10m;
- root /var/www/stream/;
-# index index.pl index.html;
- index index.pl index.py index.html;
- location /hls {
- types {
- #application/vnd.apple.mpegurl m3u8;
- application/x-mpegURL m3u8;
- video/mp2t ts;
- text/html htm;
- }
- root /var/www/;
- add_header Cache-Control no-cache;
- }
- location /stat {
- allow 185.110.150.0/25;
- allow 2a06:5841:150a::/64;
- allow 185.110.149.0/26;
- allow 2a06:5841:149a::/64;
- allow 185.110.148.0/26;
- allow 2a06:5841:1337::/64;
- allow 185.110.151.0/27;
- allow 2a06:5841:151a::/64;
- deny all;
- rtmp_stat all;
- rtmp_stat_stylesheet /stat.xsl;
- }
- location /stat.xsl {
- allow 185.110.150.0/25;
- allow 2a06:5841:150a::/64;
- allow 185.110.149.0/26;
- allow 2a06:5841:149a::/64;
- allow 185.110.148.0/26;
- allow 2a06:5841:1337::/64;
- allow 185.110.151.0/27;
- allow 2a06:5841:151a::/64;
- deny all;
- }
- location ~ \.py {
- try_files $uri =404;
- fastcgi_pass unix:/tmp/index-fcgi.sock;
- fastcgi_index index.py;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- include fastcgi_params;
- }
- location ~ \.pl|cgi$ {
- try_files $uri =404;
- gzip off;
- fastcgi_pass 127.0.0.1:8999;
- fastcgi_index index.pl;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location / {
- try_files $uri $uri/ =404;
- }
-}
-
-# NMS-backend
-upstream nms {
- server obi-wan.tg16.gathering.org;
- keepalive 32;
-}
-
-# NMS
-server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- access_log /var/log/nginx/nms.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/nms.tg16.gathering.org_ssl_error.log error;
- server_name nms.tg16.gathering.org nms-public.tg16.gathering.org nms-api.tg16.gathering.org nms4.tg16.gathering.org nms6.tg16.gathering.org;
- add_header Strict-Transport-Security max-age=15768000;
- add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
- ssl_prefer_server_ciphers on;
- ssl_certificate /root/le/prodcerts/yoda.prod.pem;
- ssl_certificate_key /root/le/keys/domain.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- client_max_body_size 10m;
- ssl_stapling on;
- ssl_stapling_verify on;
- location / {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http://nms;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- }
-}
-
-# Stats
-server {
- listen 443 ssl http2;
- listen [::]:443 ssl http2;
- access_log /var/log/nginx/stats.tg16.gathering.org_ssl_access.log;
- error_log /var/log/nginx/stats.tg16.gathering.org_ssl_error.log error;
- server_name stats.tg16.gathering.org;
- add_header Strict-Transport-Security max-age=15768000;
- add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
- ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
- ssl_prefer_server_ciphers on;
- ssl_certificate /root/le/prodcerts/yoda.prod.pem;
- ssl_certificate_key /root/le/keys/domain.key;
- ssl_session_timeout 5m;
- ssl_session_cache shared:SSL:50m;
- client_max_body_size 10m;
- ssl_stapling on;
- ssl_stapling_verify on;
- root /var/www/stats;
- location / {
- try_files $uri $uri/ =404;
- }
-}
diff --git a/web/etc/varnish/nms.vcl b/web/etc/varnish/nms.vcl
deleted file mode 100644
index 754ecbc..0000000
--- a/web/etc/varnish/nms.vcl
+++ /dev/null
@@ -1,55 +0,0 @@
-# vim: ts=8:expandtab:sw=4:softtabstop=4
-
-vcl 4.0;
-
-backend default {
- .host = "127.0.0.1";
- .port = "8080";
-}
-
-sub vcl_recv {
- if (req.url ~ "^/where" || req.url ~ "^/location") {
- set req.url = "/api/public/location";
- }
- if (req.method != "GET" &&
- req.method != "HEAD" &&
- req.method != "PUT" &&
- req.method != "POST" &&
- req.method != "TRACE" &&
- req.method != "OPTIONS" &&
- req.method != "DELETE") {
- # Vi hater alt som er gøy.
- return (synth(418,"LOLOLOL"));
- }
-
- if (req.method != "GET" && req.method != "HEAD") {
- /* We only deal with GET and HEAD by default */
- return (pass);
- }
-
- # Brukes ikke. Cookies er for nubs.
- unset req.http.Cookie;
-
- # Tvinges gjennom for å cache med authorization-skrot.
- return (hash);
-}
-
-
-# Rosa magi
-sub vcl_hash {
- # Wheee. Legg til authorization-headeren i hashen.
- hash_data(req.http.authorization);
-}
-
-# Mauve magi. Hva nå enn det er.
-# Dette er WIP - Skal flyttes til backend
-sub vcl_backend_response {
- set beresp.http.x-url = bereq.url;
- if (beresp.http.x-ban) {
- ban("obj.http.x-url ~ " + beresp.http.x-ban);
- }
- if (beresp.status != 200) {
- set beresp.uncacheable = false;
- set beresp.ttl = 5s;
- }
-}
diff --git a/web/nms-public.gathering.org/api/public/dhcp b/web/nms-public.gathering.org/api/public/dhcp
deleted file mode 100755
index 91d52af..0000000
--- a/web/nms-public.gathering.org/api/public/dhcp
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web qw (%json finalize_output);
-use strict;
-use warnings;
-use Data::Dumper;
-
-nms::web::setwhen('60m');
-my $q = $nms::web::dbh->prepare('select distinct on (sysname) extract(epoch from date_trunc(\'second\',time)) as time,sysname from dhcp join switches on dhcp.switch = switches.switch where ' . $nms::web::when . ' order by sysname,time desc;');
-$q->execute();
-while ( my $ref = $q->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
- $json{'dhcp'}{$ref->{'sysname'}} = $ref->{'time'};
-}
-
-$nms::web::cc{'max-age'} = "5";
-$nms::web::cc{'stale-while-revalidate'} = "30";
-finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/dhcp-summary b/web/nms-public.gathering.org/api/public/dhcp-summary
deleted file mode 100755
index a0e5609..0000000
--- a/web/nms-public.gathering.org/api/public/dhcp-summary
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /usr/bin/perl
-use lib '../../../../include';
-use strict;
-use warnings;
-use nms::web;
-
-nms::web::setwhen('2h');
-
-my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;");
-$q2->execute();
-while (my $ref = $q2->fetchrow_hashref()) {
- $nms::web::json{'dhcp'} = $ref;
-}
-$nms::web::cc{'max-age'} = "10";
-$nms::web::cc{'stale-while-revalidate'} = "15";
-finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/ping b/web/nms-public.gathering.org/api/public/ping
deleted file mode 100755
index db46b00..0000000
--- a/web/nms-public.gathering.org/api/public/ping
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /usr/bin/perl
-use lib '../../../../include';
-use strict;
-use warnings;
-use nms::web;
-
-nms::web::setwhen('10s');
-
-my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where "
- . $nms::web::when . " group by switch)");
-
-$q->execute();
-while (my $ref = $q->fetchrow_hashref()) {
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'};
- # Get seconds, without decimlas, from timestamp.
- # '00:01:01.435601' => 61 seconds.
- my ( $h, $m, $s ) = split( ':|\.', $ref->{'age'} );
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s; # $$ref->{'age'};
-}
-
-my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE "
- . $nms::web::when . " ORDER BY switch, time DESC;");
-$qs->execute();
-while ( my $ref = $qs->fetchrow_hashref() ) {
- $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'};
-}
-
-my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE "
- . $nms::web::when . " ORDER BY linknet, time DESC;");
-$lq->execute();
-while ( my $ref = $lq->fetchrow_hashref() ) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ];
-}
-
-$nms::web::cc{'max-age'} = "2";
-$nms::web::cc{'stale-while-revalidate'} = "15";
-finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/switch-state b/web/nms-public.gathering.org/api/public/switch-state
deleted file mode 100755
index 0e28cfd..0000000
--- a/web/nms-public.gathering.org/api/public/switch-state
+++ /dev/null
@@ -1,91 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web qw (%json finalize_output);
-use strict;
-use warnings;
-use Data::Dumper;
-
-my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
- . $nms::web::when . 'group by switch);');
-
-$q->execute();
-while ( my $ref = $q->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
-
- my %data = %{JSON::XS::decode_json($ref->{'data'})};
-
- for my $porti (keys %{$data{'ports'}}) {
- my %port = %{$data{'ports'}{$porti}};
- my $smallport = $porti;
- if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
- $smallport =~ s/[0-9-].*$//;
- } else {
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
- }
- if ($porti =~ /ge-0\/0\/4[4-7]$/) {
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{'uplinks'}{'live'} += 1;
- }
- $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
- }
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- $json{'switches'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{ifs}{$smallport}{'live'} += 1;
- $json{'switches'}{$sysname}{totals}{'live'} += 1;
- }
- $json{'switches'}{$sysname}{totals}{'total'} += 1;
- }
- $json{'switches'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'};
- $json{'switches'}{$sysname}{'time'} = $ref->{'time'};
-}
-
-nms::web::setwhen('15m','10m');
-my $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
- . $nms::web::when . 'group by switch);');
-
-$q2->execute();
-while ( my $ref = $q2->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
-
- my %data = %{JSON::XS::decode_json($ref->{'data'})};
-
- for my $porti (keys %{$data{'ports'}}) {
- my %port = %{$data{'ports'}{$porti}};
- my $smallport = $porti;
- if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
- $smallport =~ s/[0-9-].*$//;
- } else {
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
- }
- if ($porti =~ /ge-0\/0\/4[4-7]$/) {
- $json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'then'}{$sysname}{'uplinks'}{'live'} += 1;
- }
- $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
- }
-
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- $json{'then'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'then'}{$sysname}{ifs}{$smallport}{'live'} += 1;
- $json{'then'}{$sysname}{totals}{'live'} += 1;
- }
- $json{'then'}{$sysname}{totals}{'total'} += 1;
- }
- $json{'then'}{$sysname}{'temp'} = $data{'misc'}{'enterprises.2636.3.1.13.1.7.7.1.0.0'}{''};
- $json{'then'}{$sysname}{'time'} = $ref->{'time'};
-}
-$nms::web::cc{'max-age'} = "5";
-$nms::web::cc{'stale-while-revalidate'} = "30";
-finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/switches b/web/nms-public.gathering.org/api/public/switches
deleted file mode 100755
index 890b7d7..0000000
--- a/web/nms-public.gathering.org/api/public/switches
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web;
-use strict;
-use warnings;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "60";
-
-my $q2 = $nms::web::dbh->prepare('select switch,sysname,distro_name,placement,mgmt_v4_addr,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,community,last_updated,switchtype from switches where placement is not null');
-
-$q2->execute();
-while (my $ref = $q2->fetchrow_hashref()) {
- $ref->{'placement'} =~ /\((-?\d+),(-?\d+)\),\((-?\d+),(-?\d+)\)/;
- my ($x1, $y1, $x2, $y2) = ($1, $2, $3, $4);
- my $sysname = $ref->{'sysname'};
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'x'} = $x2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'y'} = $y2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'width'} = $x1 - $x2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'height'} = $y1 - $y2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'distro_name'} = $ref->{'distro_name'};
-}
-
-my $q4 = $nms::web::dbh->prepare('select linknet, (select sysname from switches where switch = switch1) as sysname1, (select sysname from switches where switch = switch2) as sysname2 from linknets');
-
-$q4->execute();
-while (my $ref = $q4->fetchrow_hashref()) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = $ref;
-}
-
-finalize_output();
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.css b/web/nms-public.gathering.org/css/bootstrap-theme.css
deleted file mode 100644
index b0fdfcb..0000000
--- a/web/nms-public.gathering.org/css/bootstrap-theme.css
+++ /dev/null
@@ -1,476 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-default .badge,
-.btn-primary .badge,
-.btn-success .badge,
-.btn-info .badge,
-.btn-warning .badge,
-.btn-danger .badge {
- text-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
-}
-.btn-default {
- text-shadow: 0 1px 0 #fff;
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #dbdbdb;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
- background-color: #e0e0e0;
- background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
- background-color: #e0e0e0;
- border-color: #dbdbdb;
-}
-.btn-default.disabled,
-.btn-default:disabled,
-.btn-default[disabled] {
- background-color: #e0e0e0;
- background-image: none;
-}
-.btn-primary {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
- background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #245580;
-}
-.btn-primary:hover,
-.btn-primary:focus {
- background-color: #265a88;
- background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #265a88;
- border-color: #245580;
-}
-.btn-primary.disabled,
-.btn-primary:disabled,
-.btn-primary[disabled] {
- background-color: #265a88;
- background-image: none;
-}
-.btn-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
- background-color: #419641;
- background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #419641;
- border-color: #3e8f3e;
-}
-.btn-success.disabled,
-.btn-success:disabled,
-.btn-success[disabled] {
- background-color: #419641;
- background-image: none;
-}
-.btn-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
- background-color: #2aabd2;
- background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #2aabd2;
- border-color: #28a4c9;
-}
-.btn-info.disabled,
-.btn-info:disabled,
-.btn-info[disabled] {
- background-color: #2aabd2;
- background-image: none;
-}
-.btn-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
- background-color: #eb9316;
- background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #eb9316;
- border-color: #e38d13;
-}
-.btn-warning.disabled,
-.btn-warning:disabled,
-.btn-warning[disabled] {
- background-color: #eb9316;
- background-image: none;
-}
-.btn-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
- background-color: #c12e2a;
- background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #c12e2a;
- border-color: #b92c28;
-}
-.btn-danger.disabled,
-.btn-danger:disabled,
-.btn-danger[disabled] {
- background-color: #c12e2a;
- background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- background-color: #e8e8e8;
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- background-color: #2e6da4;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
-}
-.navbar-default {
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
- background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
- background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- border-radius: 0;
-}
-@media (max-width: 767px) {
- .navbar .navbar-nav .open .dropdown-menu > .active > a,
- .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
- }
-}
-.alert {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
- background-repeat: repeat-x;
- border-color: #b2dba1;
-}
-.alert-info {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #9acfea;
-}
-.alert-warning {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #f5e79e;
-}
-.alert-danger {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dca7a7;
-}
-.progress {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
- background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- text-shadow: 0 -1px 0 #286090;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
- background-repeat: repeat-x;
- border-color: #2b669a;
-}
-.list-group-item.active .badge,
-.list-group-item.active:hover .badge,
-.list-group-item.active:focus .badge {
- text-shadow: none;
-}
-.panel {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
- background-repeat: repeat-x;
-}
-.well {
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dcdcdc;
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.css.map b/web/nms-public.gathering.org/css/bootstrap-theme.css.map
deleted file mode 100644
index 5a12d63..0000000
--- a/web/nms-public.gathering.org/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.min.css b/web/nms-public.gathering.org/css/bootstrap-theme.min.css
deleted file mode 100644
index cefa3d1..0000000
--- a/web/nms-public.gathering.org/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/bootstrap.css b/web/nms-public.gathering.org/css/bootstrap.css
deleted file mode 100644
index fb15e3d..0000000
--- a/web/nms-public.gathering.org/css/bootstrap.css
+++ /dev/null
@@ -1,6584 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- margin: .67em 0;
- font-size: 2em;
-}
-mark {
- color: #000;
- background: #ff0;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -.5em;
-}
-sub {
- bottom: -.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- height: 0;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font: inherit;
- color: inherit;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- padding: .35em .625em .75em;
- margin: 0 2px;
- border: 1px solid #c0c0c0;
-}
-legend {
- padding: 0;
- border: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-td,
-th {
- padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
- *,
- *:before,
- *:after {
- color: #000 !important;
- text-shadow: none !important;
- background: transparent !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
-
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- select {
- background: #fff !important;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before,
-.glyphicon-eur:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-.glyphicon-cd:before {
- content: "\e201";
-}
-.glyphicon-save-file:before {
- content: "\e202";
-}
-.glyphicon-open-file:before {
- content: "\e203";
-}
-.glyphicon-level-up:before {
- content: "\e204";
-}
-.glyphicon-copy:before {
- content: "\e205";
-}
-.glyphicon-paste:before {
- content: "\e206";
-}
-.glyphicon-alert:before {
- content: "\e209";
-}
-.glyphicon-equalizer:before {
- content: "\e210";
-}
-.glyphicon-king:before {
- content: "\e211";
-}
-.glyphicon-queen:before {
- content: "\e212";
-}
-.glyphicon-pawn:before {
- content: "\e213";
-}
-.glyphicon-bishop:before {
- content: "\e214";
-}
-.glyphicon-knight:before {
- content: "\e215";
-}
-.glyphicon-baby-formula:before {
- content: "\e216";
-}
-.glyphicon-tent:before {
- content: "\26fa";
-}
-.glyphicon-blackboard:before {
- content: "\e218";
-}
-.glyphicon-bed:before {
- content: "\e219";
-}
-.glyphicon-apple:before {
- content: "\f8ff";
-}
-.glyphicon-erase:before {
- content: "\e221";
-}
-.glyphicon-hourglass:before {
- content: "\231b";
-}
-.glyphicon-lamp:before {
- content: "\e223";
-}
-.glyphicon-duplicate:before {
- content: "\e224";
-}
-.glyphicon-piggy-bank:before {
- content: "\e225";
-}
-.glyphicon-scissors:before {
- content: "\e226";
-}
-.glyphicon-bitcoin:before {
- content: "\e227";
-}
-.glyphicon-btc:before {
- content: "\e227";
-}
-.glyphicon-xbt:before {
- content: "\e227";
-}
-.glyphicon-yen:before {
- content: "\00a5";
-}
-.glyphicon-jpy:before {
- content: "\00a5";
-}
-.glyphicon-ruble:before {
- content: "\20bd";
-}
-.glyphicon-rub:before {
- content: "\20bd";
-}
-.glyphicon-scale:before {
- content: "\e230";
-}
-.glyphicon-ice-lolly:before {
- content: "\e231";
-}
-.glyphicon-ice-lolly-tasted:before {
- content: "\e232";
-}
-.glyphicon-education:before {
- content: "\e233";
-}
-.glyphicon-option-horizontal:before {
- content: "\e234";
-}
-.glyphicon-option-vertical:before {
- content: "\e235";
-}
-.glyphicon-menu-hamburger:before {
- content: "\e236";
-}
-.glyphicon-modal-window:before {
- content: "\e237";
-}
-.glyphicon-oil:before {
- content: "\e238";
-}
-.glyphicon-grain:before {
- content: "\e239";
-}
-.glyphicon-sunglasses:before {
- content: "\e240";
-}
-.glyphicon-text-size:before {
- content: "\e241";
-}
-.glyphicon-text-color:before {
- content: "\e242";
-}
-.glyphicon-text-background:before {
- content: "\e243";
-}
-.glyphicon-object-align-top:before {
- content: "\e244";
-}
-.glyphicon-object-align-bottom:before {
- content: "\e245";
-}
-.glyphicon-object-align-horizontal:before {
- content: "\e246";
-}
-.glyphicon-object-align-left:before {
- content: "\e247";
-}
-.glyphicon-object-align-vertical:before {
- content: "\e248";
-}
-.glyphicon-object-align-right:before {
- content: "\e249";
-}
-.glyphicon-triangle-right:before {
- content: "\e250";
-}
-.glyphicon-triangle-left:before {
- content: "\e251";
-}
-.glyphicon-triangle-bottom:before {
- content: "\e252";
-}
-.glyphicon-triangle-top:before {
- content: "\e253";
-}
-.glyphicon-console:before {
- content: "\e254";
-}
-.glyphicon-superscript:before {
- content: "\e255";
-}
-.glyphicon-subscript:before {
- content: "\e256";
-}
-.glyphicon-menu-left:before {
- content: "\e257";
-}
-.glyphicon-menu-right:before {
- content: "\e258";
-}
-.glyphicon-menu-down:before {
- content: "\e259";
-}
-.glyphicon-menu-up:before {
- content: "\e260";
-}
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
-
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333;
- background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #337ab7;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- display: inline-block;
- max-width: 100%;
- height: auto;
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-[role="button"] {
- cursor: pointer;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 36px;
-}
-h2,
-.h2 {
- font-size: 30px;
-}
-h3,
-.h3 {
- font-size: 24px;
-}
-h4,
-.h4 {
- font-size: 18px;
-}
-h5,
-.h5 {
- font-size: 14px;
-}
-h6,
-.h6 {
- font-size: 12px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-mark,
-.mark {
- padding: .2em;
- background-color: #fcf8e3;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777;
-}
-.text-primary {
- color: #337ab7;
-}
-a.text-primary:hover {
- color: #286090;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #337ab7;
-}
-a.bg-primary:hover {
- background-color: #286090;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 40px 0 20px;
- border-bottom: 1px solid #eee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- margin-left: -5px;
- list-style: none;
-}
-.list-inline > li {
- display: inline-block;
- padding-right: 5px;
- padding-left: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- text-align: right;
- border-right: 5px solid #eee;
- border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #fff;
- background-color: #333;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-.row {
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-table {
- background-color: transparent;
-}
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777;
- text-align: left;
-}
-th {
- text-align: left;
-}
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table .table {
- background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- display: table-column;
- float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- display: table-cell;
- float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-.table-responsive {
- min-height: .01%;
- overflow-x: auto;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 34px;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #999;
-}
-.form-control::-webkit-input-placeholder {
- color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #eee;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 34px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 46px;
- }
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-top: 4px \9;
- margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- vertical-align: middle;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- min-height: 34px;
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-right: 0;
- padding-left: 0;
-}
-.input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
- height: auto;
-}
-.form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.form-group-sm .form-control {
- height: 30px;
- line-height: 30px;
-}
-textarea.form-group-sm .form-control,
-select[multiple].form-group-sm .form-control {
- height: auto;
-}
-.form-group-sm .form-control-static {
- height: 30px;
- min-height: 32px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
-}
-.input-lg {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-lg {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
- height: auto;
-}
-.form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.form-group-lg .form-control {
- height: 46px;
- line-height: 46px;
-}
-textarea.form-group-lg .form-control,
-select[multiple].form-group-lg .form-control {
- height: auto;
-}
-.form-group-lg .form-control-static {
- height: 46px;
- min-height: 38px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
- pointer-events: none;
-}
-.input-lg + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #3c763d;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- background-color: #f2dede;
- border-color: #a94442;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
- top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- padding-top: 7px;
- margin-top: 0;
- margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .control-label {
- padding-top: 7px;
- margin-bottom: 0;
- text-align: right;
- }
-}
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.333333px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-.btn {
- display: inline-block;
- padding: 6px 12px;
- margin-bottom: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- opacity: .65;
-}
-.btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-.btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary.focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success.focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
-}
-.btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info.focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
-}
-.btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning.focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
-}
-.btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger.focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
-}
-.btn-link {
- font-weight: normal;
- color: #337ab7;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity .15s linear;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
- -webkit-transition-duration: .35s;
- -o-transition-duration: .35s;
- transition-duration: .35s;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px dashed;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- text-align: left;
- list-style: none;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #337ab7;
- outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- content: "";
- border-top: 0;
- border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- right: 0;
- left: auto;
- }
- .navbar-right .dropdown-menu-left {
- right: auto;
- left: 0;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-right: 8px;
- padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-right: 12px;
- padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- display: table-cell;
- float: none;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-right: 0;
- padding-left: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555;
- text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- margin-left: -1px;
-}
-.nav {
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.nav > li {
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.nav > li.disabled > a {
- color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777;
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eee;
- border-color: #337ab7;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555;
- cursor: default;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #337ab7;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.tab-content > .tab-pane {
- display: none;
-}
-.tab-content > .active {
- display: block;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 50px;
- margin-bottom: 20px;
- border: 1px solid transparent;
-}
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-.navbar-collapse {
- padding-right: 15px;
- padding-left: 15px;
- overflow-x: visible;
- -webkit-overflow-scrolling: touch;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-right: 0;
- padding-left: 0;
- }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- height: 50px;
- padding: 15px 15px;
- font-size: 18px;
- line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-.navbar-brand > img {
- display: block;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- padding: 9px 10px;
- margin-top: 8px;
- margin-right: 15px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-@media (min-width: 768px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
-}
-.navbar-form {
- padding: 10px 15px;
- margin-top: 8px;
- margin-right: -15px;
- margin-bottom: 8px;
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- padding-top: 0;
- padding-bottom: 0;
- margin-right: 0;
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
-}
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-@media (min-width: 768px) {
- .navbar-text {
- float: left;
- margin-right: 15px;
- margin-left: 15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- margin-right: -15px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
-}
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777;
-}
-.navbar-default .navbar-link:hover {
- color: #333;
-}
-.navbar-default .btn-link {
- color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-.navbar-inverse {
- background-color: #222;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #080808;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-.navbar-inverse .btn-link {
- color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- padding: 0 5px;
- color: #ccc;
- content: "/\00a0";
-}
-.breadcrumb > .active {
- color: #777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- margin-left: -1px;
- line-height: 1.42857143;
- color: #337ab7;
- text-decoration: none;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- color: #23527c;
- background-color: #eee;
- border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 2;
- color: #fff;
- cursor: default;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
- border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- text-align: center;
- list-style: none;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #337ab7;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #286090;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge,
-.btn-group-xs > .btn .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- padding: 30px 15px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding: 48px 0;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: border .2s ease-in-out;
- -o-transition: border .2s ease-in-out;
- transition: border .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-right: auto;
- margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #337ab7;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333;
-}
-.alert {
- padding: 15px;
- margin-bottom: 20px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f5f5f5;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- -webkit-transition: width .6s ease;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media,
-.media-body {
- overflow: hidden;
- zoom: 1;
-}
-.media-body {
- width: 10000px;
-}
-.media-object {
- display: block;
-}
-.media-right,
-.media > .pull-right {
- padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
- padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-.media-middle {
- vertical-align: middle;
-}
-.media-bottom {
- vertical-align: bottom;
-}
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- padding-left: 0;
- margin-bottom: 20px;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.list-group-item:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-a.list-group-item {
- color: #555;
-}
-a.list-group-item .list-group-item-heading {
- color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
- color: #555;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a,
-.panel-title > small,
-.panel-title > .small,
-.panel-title > small > a,
-.panel-title > .small > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
- padding-right: 15px;
- padding-left: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- margin-bottom: 0;
- border: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
-}
-.panel-default {
- border-color: #ddd;
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
-}
-.panel-primary {
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
-}
-.panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- filter: alpha(opacity=20);
- opacity: .2;
-}
-.close:hover,
-.close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- filter: alpha(opacity=50);
- opacity: .5;
-}
-button.close {
- -webkit-appearance: none;
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: none;
- overflow: hidden;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out;
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
-}
-.modal-backdrop.fade {
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.modal-backdrop.in {
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.modal-header {
- min-height: 16.42857143px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 12px;
- font-weight: normal;
- line-height: 1.4;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.tooltip.in {
- filter: alpha(opacity=90);
- opacity: .9;
-}
-.tooltip.top {
- padding: 5px 0;
- margin-top: -3px;
-}
-.tooltip.right {
- padding: 0 5px;
- margin-left: 3px;
-}
-.tooltip.bottom {
- padding: 5px 0;
- margin-top: 3px;
-}
-.tooltip.left {
- padding: 0 5px;
- margin-left: -3px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- text-decoration: none;
- background-color: #000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
- right: 5px;
- bottom: 0;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: left;
- white-space: normal;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- content: "";
- border-width: 10px;
-}
-.popover.top > .arrow {
- bottom: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, .25);
- border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- content: " ";
- border-top-color: #fff;
- border-bottom-width: 0;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, .25);
- border-left-width: 0;
-}
-.popover.right > .arrow:after {
- bottom: -10px;
- left: 1px;
- content: " ";
- border-right-color: #fff;
- border-left-width: 0;
-}
-.popover.bottom > .arrow {
- top: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
- top: 1px;
- margin-left: -10px;
- content: " ";
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
- right: 1px;
- bottom: -10px;
- content: " ";
- border-right-width: 0;
- border-left-color: #fff;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-.carousel-inner > .item {
- position: relative;
- display: none;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-@media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform .6s ease-in-out;
- -o-transition: -o-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
-
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- left: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- left: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- left: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 15%;
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control.right {
- right: 0;
- left: auto;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #fff;
- text-decoration: none;
- filter: alpha(opacity=90);
- outline: 0;
- opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
- line-height: 1;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- padding-left: 0;
- margin-left: -30%;
- text-align: center;
- list-style: none;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- border: 1px solid #fff;
- border-radius: 10px;
-}
-.carousel-indicators .active {
- width: 12px;
- height: 12px;
- margin: 0;
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
- .carousel-caption {
- right: 20%;
- left: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-right: auto;
- margin-left: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
-}
-.affix {
- position: fixed;
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/web/nms-public.gathering.org/css/bootstrap.css.map b/web/nms-public.gathering.org/css/bootstrap.css.map
deleted file mode 100644
index 2fd84f3..0000000
--- a/web/nms-public.gathering.org/css/bootstrap.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,k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H;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qE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","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n }\n .form-control-static {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n min-height: (@line-height-computed + @font-size-small);\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n }\n .form-control-static {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n min-height: (@line-height-computed + @font-size-large);\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding (@jumbotron-padding / 2);\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding: (@jumbotron-padding * 1.6) 0;\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-small;\n font-weight: normal;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: @line-height-base;\n text-align: left;\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/bootstrap.min.css b/web/nms-public.gathering.org/css/bootstrap.min.css
deleted file mode 100644
index cd1c616..0000000
--- a/web/nms-public.gathering.org/css/bootstrap.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/jquery.datetimepicker.css b/web/nms-public.gathering.org/css/jquery.datetimepicker.css
deleted file mode 100644
index beda145..0000000
--- a/web/nms-public.gathering.org/css/jquery.datetimepicker.css
+++ /dev/null
@@ -1,568 +0,0 @@
-.xdsoft_datetimepicker {
- box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506);
- background: #fff;
- border-bottom: 1px solid #bbb;
- border-left: 1px solid #ccc;
- border-right: 1px solid #ccc;
- border-top: 1px solid #ccc;
- color: #333;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- padding: 8px;
- padding-left: 0;
- padding-top: 2px;
- position: absolute;
- z-index: 9999;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- display: none;
-}
-.xdsoft_datetimepicker.xdsoft_rtl {
- padding: 8px 0 8px 8px;
-}
-
-.xdsoft_datetimepicker iframe {
- position: absolute;
- left: 0;
- top: 0;
- width: 75px;
- height: 210px;
- background: transparent;
- border: none;
-}
-
-/*For IE8 or lower*/
-.xdsoft_datetimepicker button {
- border: none !important;
-}
-
-.xdsoft_noselect {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- -o-user-select: none;
- user-select: none;
-}
-
-.xdsoft_noselect::selection { background: transparent }
-.xdsoft_noselect::-moz-selection { background: transparent }
-
-.xdsoft_datetimepicker.xdsoft_inline {
- display: inline-block;
- position: static;
- box-shadow: none;
-}
-
-.xdsoft_datetimepicker * {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
- display: none;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
- display: block;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker {
- width: 224px;
- float: left;
- margin-left: 8px;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker {
- float: right;
- margin-right: 8px;
- margin-left: 0;
-}
-
-.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker {
- width: 256px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker {
- width: 58px;
- float: left;
- text-align: center;
- margin-left: 8px;
- margin-top: 0;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker {
- float: right;
- margin-right: 8px;
- margin-left: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker {
- margin-top: 8px;
- margin-bottom: 3px
-}
-
-.xdsoft_datetimepicker .xdsoft_mounthpicker {
- position: relative;
- text-align: center;
-}
-
-.xdsoft_datetimepicker .xdsoft_label i,
-.xdsoft_datetimepicker .xdsoft_prev,
-.xdsoft_datetimepicker .xdsoft_next,
-.xdsoft_datetimepicker .xdsoft_today_button {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC);
-}
-
-.xdsoft_datetimepicker .xdsoft_label i {
- opacity: 0.5;
- background-position: -92px -19px;
- display: inline-block;
- width: 9px;
- height: 20px;
- vertical-align: middle;
-}
-
-.xdsoft_datetimepicker .xdsoft_prev {
- float: left;
- background-position: -20px 0;
-}
-.xdsoft_datetimepicker .xdsoft_today_button {
- float: left;
- background-position: -70px 0;
- margin-left: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_next {
- float: right;
- background-position: 0 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_next,
-.xdsoft_datetimepicker .xdsoft_prev ,
-.xdsoft_datetimepicker .xdsoft_today_button {
- background-color: transparent;
- background-repeat: no-repeat;
- border: 0 none;
- cursor: pointer;
- display: block;
- height: 30px;
- opacity: 0.5;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- outline: medium none;
- overflow: hidden;
- padding: 0;
- position: relative;
- text-indent: 100%;
- white-space: nowrap;
- width: 20px;
- min-width: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
- float: none;
- background-position: -40px -15px;
- height: 15px;
- width: 30px;
- display: block;
- margin-left: 14px;
- margin-top: 7px;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev,
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next {
- float: none;
- margin-left: 0;
- margin-right: 14px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
- background-position: -40px 0;
- margin-bottom: 7px;
- margin-top: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
- height: 151px;
- overflow: hidden;
- border-bottom: 1px solid #ddd;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div {
- background: #f5f5f5;
- border-top: 1px solid #ddd;
- color: #666;
- font-size: 12px;
- text-align: center;
- border-collapse: collapse;
- cursor: pointer;
- border-bottom-width: 0;
- height: 25px;
- line-height: 25px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child {
- border-top-width: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_today_button:hover,
-.xdsoft_datetimepicker .xdsoft_next:hover,
-.xdsoft_datetimepicker .xdsoft_prev:hover {
- opacity: 1;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
-}
-
-.xdsoft_datetimepicker .xdsoft_label {
- display: inline;
- position: relative;
- z-index: 9999;
- margin: 0;
- padding: 5px 3px;
- font-size: 14px;
- line-height: 20px;
- font-weight: bold;
- background-color: #fff;
- float: left;
- width: 182px;
- text-align: center;
- cursor: pointer;
-}
-
-.xdsoft_datetimepicker .xdsoft_label:hover>span {
- text-decoration: underline;
-}
-
-.xdsoft_datetimepicker .xdsoft_label:hover i {
- opacity: 1.0;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
- border: 1px solid #ccc;
- position: absolute;
- right: 0;
- top: 30px;
- z-index: 101;
- display: none;
- background: #fff;
- max-height: 160px;
- overflow-y: hidden;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px }
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px }
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
- color: #fff;
- background: #ff8000;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
- padding: 2px 10px 2px 5px;
- text-decoration: none !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
- background: #33aaff;
- box-shadow: #178fe5 0 1px 3px 0 inset;
- color: #fff;
- font-weight: 700;
-}
-
-.xdsoft_datetimepicker .xdsoft_month {
- width: 100px;
- text-align: right;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar {
- clear: both;
-}
-
-.xdsoft_datetimepicker .xdsoft_year{
- width: 48px;
- margin-left: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar table {
- border-collapse: collapse;
- width: 100%;
-
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td > div {
- padding-right: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- height: 25px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th {
- width: 14.2857142%;
- background: #f5f5f5;
- border: 1px solid #ddd;
- color: #666;
- font-size: 12px;
- text-align: right;
- vertical-align: middle;
- padding: 0;
- border-collapse: collapse;
- cursor: pointer;
- height: 25px;
-}
-.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th {
- width: 12.5%;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- background: #f1f1f1;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
- color: #33aaff;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default {
- background: #ffe9d2;
- box-shadow: #ffb871 0 1px 4px 0 inset;
- color: #000;
-}
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint {
- background: #c1ffc9;
- box-shadow: #00dd1c 0 1px 4px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
- background: #33aaff;
- box-shadow: #178fe5 0 1px 3px 0 inset;
- color: #fff;
- font-weight: 700;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
-.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled {
- opacity: 0.5;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- cursor: default;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
- opacity: 0.2;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
- color: #fff !important;
- background: #ff8000 !important;
- box-shadow: none !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover {
- background: #33aaff !important;
- box-shadow: #178fe5 0 1px 3px 0 inset !important;
- color: #fff !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover {
- color: inherit !important;
- background: inherit !important;
- box-shadow: inherit !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- font-weight: 700;
- text-align: center;
- color: #999;
- cursor: default;
-}
-
-.xdsoft_datetimepicker .xdsoft_copyright {
- color: #ccc !important;
- font-size: 10px;
- clear: both;
- float: none;
- margin-left: 8px;
-}
-
-.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important }
-.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important }
-
-.xdsoft_time_box {
- position: relative;
- border: 1px solid #ccc;
-}
-.xdsoft_scrollbar >.xdsoft_scroller {
- background: #ccc !important;
- height: 20px;
- border-radius: 3px;
-}
-.xdsoft_scrollbar {
- position: absolute;
- width: 7px;
- right: 0;
- top: 0;
- bottom: 0;
- cursor: pointer;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar {
- left: 0;
- right: auto;
-}
-.xdsoft_scroller_box {
- position: relative;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark {
- box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506);
- background: #000;
- border-bottom: 1px solid #444;
- border-left: 1px solid #333;
- border-right: 1px solid #333;
- border-top: 1px solid #333;
- color: #ccc;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box {
- border-bottom: 1px solid #222;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div {
- background: #0a0a0a;
- border-top: 1px solid #222;
- color: #999;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label {
- background-color: #000;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select {
- border: 1px solid #333;
- background: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
- color: #000;
- background: #007fff;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
- background: #cc5500;
- box-shadow: #b03e00 0 1px 3px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==);
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- background: #0a0a0a;
- border: 1px solid #222;
- color: #999;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- background: #0e0e0e;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today {
- color: #cc5500;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default {
- background: #ffe9d2;
- box-shadow: #ffb871 0 1px 4px 0 inset;
- color:#000;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint {
- background: #c1ffc9;
- box-shadow: #00dd1c 0 1px 4px 0 inset;
- color:#000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
- background: #cc5500;
- box-shadow: #b03e00 0 1px 3px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
- color: #000 !important;
- background: #007fff !important;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- color: #666;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important }
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important }
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important }
-
-.xdsoft_dark .xdsoft_time_box {
- border: 1px solid #333;
-}
-
-.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller {
- background: #333 !important;
-}
-.xdsoft_datetimepicker .xdsoft_save_selected {
- display: block;
- border: 1px solid #dddddd !important;
- margin-top: 5px;
- width: 100%;
- color: #454551;
- font-size: 13px;
-}
-.xdsoft_datetimepicker .blue-gradient-button {
- font-family: "museo-sans", "Book Antiqua", sans-serif;
- font-size: 12px;
- font-weight: 300;
- color: #82878c;
- height: 28px;
- position: relative;
- padding: 4px 17px 4px 33px;
- border: 1px solid #d7d8da;
- background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* IE10+ */
- background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%);
- /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 );
-/* IE6-9 */
-}
-.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span {
- color: #454551;
- background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* IE10+ */
- background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%);
- /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 );
- /* IE6-9 */
-}
diff --git a/web/nms-public.gathering.org/css/navbar-static-top.css b/web/nms-public.gathering.org/css/navbar-static-top.css
deleted file mode 100644
index bf6b28e..0000000
--- a/web/nms-public.gathering.org/css/navbar-static-top.css
+++ /dev/null
@@ -1,4 +0,0 @@
-
-.navbar-static-top {
- margin-bottom: 19px;
-}
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index b93a495..0000000
--- a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index 94fb549..0000000
--- a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="400" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 1413fc6..0000000
--- a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 9e61285..0000000
--- a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2 b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b5..0000000
--- a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png b/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png
deleted file mode 100644
index 8d647a3..0000000
--- a/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart-full.png b/web/nms-public.gathering.org/img/tg15-salkart-full.png
deleted file mode 100644
index 9e22d40..0000000
--- a/web/nms-public.gathering.org/img/tg15-salkart-full.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart.png b/web/nms-public.gathering.org/img/tg15-salkart.png
deleted file mode 100644
index dce49b5..0000000
--- a/web/nms-public.gathering.org/img/tg15-salkart.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png b/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png
deleted file mode 100644
index 400cd64..0000000
--- a/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg16-salkart-full.png b/web/nms-public.gathering.org/img/tg16-salkart-full.png
deleted file mode 100644
index 6fe9d68..0000000
--- a/web/nms-public.gathering.org/img/tg16-salkart-full.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/index.html b/web/nms-public.gathering.org/index.html
deleted file mode 100644
index a10d1dc..0000000
--- a/web/nms-public.gathering.org/index.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
- <meta name="description" content="">
- <meta name="author" content="">
- <link rel="icon" href="../../favicon.ico">
-
- <title>NMS2</title>
-
- <!-- Bootstrap core CSS -->
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this template -->
- <link href="css/navbar-static-top.css" rel="stylesheet">
-
- <!-- Date-picker styles -->
- <link href="css/jquery.datetimepicker.css" rel="stylesheet">
-
- <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
- <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
- <![endif]-->
- <style type="text/css">
- canvas {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- outline: none;
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
- }
- tr.mgmt_v4_addr {
- font-weight: 700;
- }
- </style>
- </head>
-
- <body id="body">
- <nav class="navbar navbar-default navbar-static-top">
- <div class="container-fluid">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- </div>
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
- <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
- <li><a href="#dhcp" onclick="setUpdater(handler_dhcp)">DHCP map</a></li>
- <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
- <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
- <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
- <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
- <li><a href="#snmp" onclick="setUpdater(handler_snmp)">SNMP map</a></li>
- <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
- <li class="divider"> </li>
- <li><a href="#" onclick="toggleLayer('nowPickerBox');startNowPicker();">Travel in time</a></li>
- <li><a href="#" onclick="nms.playback.startReplay('2015-04-01T09:00:00','2015-04-05T12:00:00');" title="Replay from opening 120 minutes per second">Replay TG</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">View</li>
- <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
- <li><a href="#" onclick="toggleConnect()">Toggle linknets</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Move switches</li>
- <li><a href="#" onclick="nmsMap.moveSet(true);">Enable switch moving</a></li>
- <li><a href="#" onclick="nmsMap.moveSet(false);">Disable switch moving</a></li>
- <li><a href="#" onclick="nmsInfoBox.showWindow('addSwitch')">Add switch</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Help</li>
- <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
- </ul>
- </li>
- <li><p id="updater_name" class="navbar-text"></p></li>
- <div class="navbar-form navbar-left">
- <div class="form-group">
- <button class="btn btn-default btn-sm" id="legend-1"></button>
- <button class="btn btn-default btn-sm" id="legend-2"></button>
- <button class="btn btn-default btn-sm" id="legend-3"></button>
- <button class="btn btn-default btn-sm" id="legend-4"></button>
- <button class="btn btn-default btn-sm" id="legend-5"></button>
- </div>
- <div class="input-group input-group-sm">
- <input id="searchbox" type="text" class="form-control" placeholder="Filter" oninput="nmsInfoBox._search()" />
- <span class="input-group-btn">
- <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button>
- </span>
- </div>
- </div>
- </li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li>
- </ul>
- </div><!--/.nav-collapse -->
- </div>
- </nav>
-
- <div class="container-fluid" id="wrap">
-
- <div class="row-fluid">
- <div class="span12">
- <div id="aboutKeybindings" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Keyboard Shortcuts
- <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutKeybindings').style.display = 'none';" style="float: right">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <table class="table table-condensed">
- <tr>
- <th>Key</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>?</td>
- <td>Toggle this help window</td>
- </tr>
- <tr>
- <td>-</td>
- <td>Toggle navigation bar</td>
- </tr>
- <tr>
- <td>n</td>
- <td>Toggle night mode</td>
- </tr>
- <tr>
- <td>1</td>
- <td>View Ping map</td>
- </tr>
- <tr>
- <td>2</td>
- <td>View uplink map</td>
- </tr>
- <tr>
- <td>3</td>
- <td>View DHCP map</td>
- </tr>
- <tr>
- <td>4</td>
- <td>View comment spotter map</td>
- </tr>
- <tr>
- <td>5</td>
- <td>View temperature map</td>
- </tr>
- <tr>
- <td>6</td>
- <td>View uplink traffic map</td>
- </tr>
- <tr>
- <td>7</td>
- <td>View total switch traffic map</td>
- </tr>
- <tr>
- <td>8</td>
- <td>View SNMP map</td>
- </tr>
- <tr>
- <td>9</td>
- <td>View Disco map</td>
- </tr>
- <tr>
- <td>c</td>
- <td>Toggle linknet connections</td>
- </tr>
- <tr>
- <td>h</td>
- <td>Step 1 hour back in time</td>
- </tr>
- <tr>
- <td>j</td>
- <td>Step 5 minutes back in time</td>
- </tr>
- <tr>
- <td>k</td>
- <td>Step 5 minutes forward in time</td>
- </tr>
- <tr>
- <td>l</td>
- <td>Step 1 hour forward in time</td>
- </tr>
- <tr>
- <td>p</td>
- <td>Toggle playback (1 hour per second)</td>
- </tr>
- <tr>
- <td>r</td>
- <td>Return to real time</td>
- </tr>
- </table>
- </div>
- </div>
- <div id="nowPickerBox" style="position: absolute; display: none; z-index: 130;" class="col-sm-6 col-md-5">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Time travel
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('nowPickerBox').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <div class="panel-body row">
- <div class="col-sm-12">
- <div class="form-group">
- <input type="text" class="form-control" placeholder="YYYY-MM-DDThh:mm:ss" id="nowPicker">
- <div class="button-group">
- <button class="btn btn-primary" onclick="nms.playback.setNow(document.getElementById('nowPicker').dataset.iso);hideLayer('nowPickerBox');">Travel</button>
- <button class="btn btn-danger" onclick="startNowPicker(Date.now());nms.playback.setNow(false);nms.playback.play();">Back to reality</button>
- <button class="btn btn-info" data-toggle="button" onclick="toggleLayer('nowPickerInfo');">Info</button>
- </div>
- </div>
- </div>
- <div id="nowPickerInfo" class="col-sm-12" style="display:none;">
- <p>Some features do not have time travel support (comment
- spotting and DHCP map at the moment). We also lack
- compatible SNMP data for the first day or so, so you'll
- only have ping data for the first day of TG15.</p>
- <p>It could take some time to load a specific point in time
- for the first time. See "About performance" under the help
- menu for more information.</p>
- <p>You can also step backwards and forwards in time, stop
- and start replay and go back to real time using keyboard
- shortcuts. See the help menu for an overview of keyboard
- shortcuts.</p>
- </div>
- </div>
- </div>
- </div>
- <div id="info-panel-container" class="col-md-5" style="display: none; position: absolute; z-index: 120;">
- </div>
- </div>
-
- <canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
- <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10; display: none;"> </canvas>
- <canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
- <canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
- <canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
- <canvas id="textInfoCanvas" width="1920" height="1032" style="position: absolute; z-index: 45;"> </canvas>
- <canvas id="topCanvas" width="1920" height="1032" style="position: absolute; z-index: 50;"> </canvas>
- <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onmousedown="nmsMap.canvasClick(event)">
- </canvas>
- <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
-
- <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div>
- </div>
- </div><!--/.fluid-container-->
- <script src="js/jquery.min.js" type="text/javascript"></script>
- <script src="js/bootstrap.min.js" type="text/javascript"></script>
- <script type="text/javascript" src="js/nms-data.js"></script>
- <script type="text/javascript" src="js/nms-map.js"></script>
- <script type="text/javascript" src="js/nms-info-box.js"></script>
- <script type="text/javascript" src="js/nms.js"></script>
- <script type="text/javascript" src="js/nms-color-util.js"></script>
- <script type="text/javascript" src="js/nms-map-handlers.js"></script>
- <script src="js/jquery.datetimepicker.full.js" type="text/javascript"></script>
- <script type="text/javascript">
-initNMS();
- </script>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/js/bootstrap.js b/web/nms-public.gathering.org/js/bootstrap.js
deleted file mode 100644
index 1c88b71..0000000
--- a/web/nms-public.gathering.org/js/bootstrap.js
+++ /dev/null
@@ -1,2317 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') {
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
-}
-
-+function ($) {
- 'use strict';
- var version = $.fn.jquery.split(' ')[0].split('.')
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
- }
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: transition.js v3.3.4
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
- // ============================================================
-
- function transitionEnd() {
- var el = document.createElement('bootstrap')
-
- var transEndEventNames = {
- WebkitTransition : 'webkitTransitionEnd',
- MozTransition : 'transitionend',
- OTransition : 'oTransitionEnd otransitionend',
- transition : 'transitionend'
- }
-
- for (var name in transEndEventNames) {
- if (el.style[name] !== undefined) {
- return { end: transEndEventNames[name] }
- }
- }
-
- return false // explicit for ie8 ( ._.)
- }
-
- // http://blog.alexmaccaw.com/css-transitions
- $.fn.emulateTransitionEnd = function (duration) {
- var called = false
- var $el = this
- $(this).one('bsTransitionEnd', function () { called = true })
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
- setTimeout(callback, duration)
- return this
- }
-
- $(function () {
- $.support.transition = transitionEnd()
-
- if (!$.support.transition) return
-
- $.event.special.bsTransitionEnd = {
- bindType: $.support.transition.end,
- delegateType: $.support.transition.end,
- handle: function (e) {
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
- }
- }
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.3.4
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // ALERT CLASS DEFINITION
- // ======================
-
- var dismiss = '[data-dismiss="alert"]'
- var Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.VERSION = '3.3.4'
-
- Alert.TRANSITION_DURATION = 150
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = $(selector)
-
- if (e) e.preventDefault()
-
- if (!$parent.length) {
- $parent = $this.closest('.alert')
- }
-
- $parent.trigger(e = $.Event('close.bs.alert'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- // detach from parent, fire event then clean up data
- $parent.detach().trigger('closed.bs.alert').remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent
- .one('bsTransitionEnd', removeElement)
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
- removeElement()
- }
-
-
- // ALERT PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.alert')
-
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.alert
-
- $.fn.alert = Plugin
- $.fn.alert.Constructor = Alert
-
-
- // ALERT NO CONFLICT
- // =================
-
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
-
- // ALERT DATA-API
- // ==============
-
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.3.4
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // BUTTON PUBLIC CLASS DEFINITION
- // ==============================
-
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Button.DEFAULTS, options)
- this.isLoading = false
- }
-
- Button.VERSION = '3.3.4'
-
- Button.DEFAULTS = {
- loadingText: 'loading...'
- }
-
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- var $el = this.$element
- var val = $el.is('input') ? 'val' : 'html'
- var data = $el.data()
-
- state = state + 'Text'
-
- if (data.resetText == null) $el.data('resetText', $el[val]())
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- if (state == 'loadingText') {
- this.isLoading = true
- $el.addClass(d).attr(d, d)
- } else if (this.isLoading) {
- this.isLoading = false
- $el.removeClass(d).removeAttr(d)
- }
- }, this), 0)
- }
-
- Button.prototype.toggle = function () {
- var changed = true
- var $parent = this.$element.closest('[data-toggle="buttons"]')
-
- if ($parent.length) {
- var $input = this.$element.find('input')
- if ($input.prop('type') == 'radio') {
- if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
- else $parent.find('.active').removeClass('active')
- }
- if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
- } else {
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
- }
-
- if (changed) this.$element.toggleClass('active')
- }
-
-
- // BUTTON PLUGIN DEFINITION
- // ========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.button')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- var old = $.fn.button
-
- $.fn.button = Plugin
- $.fn.button.Constructor = Button
-
-
- // BUTTON NO CONFLICT
- // ==================
-
- $.fn.button.noConflict = function () {
- $.fn.button = old
- return this
- }
-
-
- // BUTTON DATA-API
- // ===============
-
- $(document)
- .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- Plugin.call($btn, 'toggle')
- e.preventDefault()
- })
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.4
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CAROUSEL CLASS DEFINITION
- // =========================
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused = null
- this.sliding = null
- this.interval = null
- this.$active = null
- this.$items = null
-
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.3.4'
-
- Carousel.TRANSITION_DURATION = 600
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true,
- keyboard: true
- }
-
- Carousel.prototype.keydown = function (e) {
- if (/input|textarea/i.test(e.target.tagName)) return
- switch (e.which) {
- case 37: this.prev(); break
- case 39: this.next(); break
- default: return
- }
-
- e.preventDefault()
- }
-
- Carousel.prototype.cycle = function (e) {
- e || (this.paused = false)
-
- this.interval && clearInterval(this.interval)
-
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
- return this
- }
-
- Carousel.prototype.getItemIndex = function (item) {
- this.$items = item.parent().children('.item')
- return this.$items.index(item || this.$active)
- }
-
- Carousel.prototype.getItemForDirection = function (direction, active) {
- var activeIndex = this.getItemIndex(active)
- var willWrap = (direction == 'prev' && activeIndex === 0)
- || (direction == 'next' && activeIndex == (this.$items.length - 1))
- if (willWrap && !this.options.wrap) return active
- var delta = direction == 'prev' ? -1 : 1
- var itemIndex = (activeIndex + delta) % this.$items.length
- return this.$items.eq(itemIndex)
- }
-
- Carousel.prototype.to = function (pos) {
- var that = this
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
- if (pos > (this.$items.length - 1) || pos < 0) return
-
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
- if (activeIndex == pos) return this.pause().cycle()
-
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
- }
-
- Carousel.prototype.pause = function (e) {
- e || (this.paused = true)
-
- if (this.$element.find('.next, .prev').length && $.support.transition) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
-
- this.interval = clearInterval(this.interval)
-
- return this
- }
-
- Carousel.prototype.next = function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- Carousel.prototype.prev = function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- Carousel.prototype.slide = function (type, next) {
- var $active = this.$element.find('.item.active')
- var $next = next || this.getItemForDirection(type, $active)
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var that = this
-
- if ($next.hasClass('active')) return (this.sliding = false)
-
- var relatedTarget = $next[0]
- var slideEvent = $.Event('slide.bs.carousel', {
- relatedTarget: relatedTarget,
- direction: direction
- })
- this.$element.trigger(slideEvent)
- if (slideEvent.isDefaultPrevented()) return
-
- this.sliding = true
-
- isCycling && this.pause()
-
- if (this.$indicators.length) {
- this.$indicators.find('.active').removeClass('active')
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
- $nextIndicator && $nextIndicator.addClass('active')
- }
-
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
- if ($.support.transition && this.$element.hasClass('slide')) {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- $active
- .one('bsTransitionEnd', function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () {
- that.$element.trigger(slidEvent)
- }, 0)
- })
- .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
- } else {
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger(slidEvent)
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
-
- // CAROUSEL PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.carousel')
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
- var action = typeof option == 'string' ? option : options.slide
-
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
-
- var old = $.fn.carousel
-
- $.fn.carousel = Plugin
- $.fn.carousel.Constructor = Carousel
-
-
- // CAROUSEL NO CONFLICT
- // ====================
-
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
-
- // CAROUSEL DATA-API
- // =================
-
- var clickHandler = function (e) {
- var href
- var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
- if (!$target.hasClass('carousel')) return
- var options = $.extend({}, $target.data(), $this.data())
- var slideIndex = $this.attr('data-slide-to')
- if (slideIndex) options.interval = false
-
- Plugin.call($target, options)
-
- if (slideIndex) {
- $target.data('bs.carousel').to(slideIndex)
- }
-
- e.preventDefault()
- }
-
- $(document)
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.4
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // COLLAPSE PUBLIC CLASS DEFINITION
- // ================================
-
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Collapse.DEFAULTS, options)
- this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
- '[data-toggle="collapse"][data-target="#' + element.id + '"]')
- this.transitioning = null
-
- if (this.options.parent) {
- this.$parent = this.getParent()
- } else {
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
- }
-
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.3.4'
-
- Collapse.TRANSITION_DURATION = 350
-
- Collapse.DEFAULTS = {
- toggle: true
- }
-
- Collapse.prototype.dimension = function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- Collapse.prototype.show = function () {
- if (this.transitioning || this.$element.hasClass('in')) return
-
- var activesData
- var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
-
- if (actives && actives.length) {
- activesData = actives.data('bs.collapse')
- if (activesData && activesData.transitioning) return
- }
-
- var startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- if (actives && actives.length) {
- Plugin.call(actives, 'hide')
- activesData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
- .attr('aria-expanded', true)
-
- this.$trigger
- .removeClass('collapsed')
- .attr('aria-expanded', true)
-
- this.transitioning = 1
-
- var complete = function () {
- this.$element
- .removeClass('collapsing')
- .addClass('collapse in')[dimension]('')
- this.transitioning = 0
- this.$element
- .trigger('shown.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
- this.$element
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
- }
-
- Collapse.prototype.hide = function () {
- if (this.transitioning || !this.$element.hasClass('in')) return
-
- var startEvent = $.Event('hide.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var dimension = this.dimension()
-
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
- this.$element
- .addClass('collapsing')
- .removeClass('collapse in')
- .attr('aria-expanded', false)
-
- this.$trigger
- .addClass('collapsed')
- .attr('aria-expanded', false)
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .removeClass('collapsing')
- .addClass('collapse')
- .trigger('hidden.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- Collapse.prototype.getParent = function () {
- return $(this.options.parent)
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
- .each($.proxy(function (i, element) {
- var $element = $(element)
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
- }, this))
- .end()
- }
-
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
- var isOpen = $element.hasClass('in')
-
- $element.attr('aria-expanded', isOpen)
- $trigger
- .toggleClass('collapsed', !isOpen)
- .attr('aria-expanded', isOpen)
- }
-
- function getTargetFromTrigger($trigger) {
- var href
- var target = $trigger.attr('data-target')
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
- return $(target)
- }
-
-
- // COLLAPSE PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.collapse')
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.collapse
-
- $.fn.collapse = Plugin
- $.fn.collapse.Constructor = Collapse
-
-
- // COLLAPSE NO CONFLICT
- // ====================
-
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
-
- // COLLAPSE DATA-API
- // =================
-
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
- var $this = $(this)
-
- if (!$this.attr('data-target')) e.preventDefault()
-
- var $target = getTargetFromTrigger($this)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $this.data()
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.4
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // DROPDOWN CLASS DEFINITION
- // =========================
-
- var backdrop = '.dropdown-backdrop'
- var toggle = '[data-toggle="dropdown"]'
- var Dropdown = function (element) {
- $(element).on('click.bs.dropdown', this.toggle)
- }
-
- Dropdown.VERSION = '3.3.4'
-
- Dropdown.prototype.toggle = function (e) {
- var $this = $(this)
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
- // if mobile we use a backdrop because click events don't delegate
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
- }
-
- var relatedTarget = { relatedTarget: this }
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this
- .trigger('focus')
- .attr('aria-expanded', 'true')
-
- $parent
- .toggleClass('open')
- .trigger('shown.bs.dropdown', relatedTarget)
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
-
- var $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.disabled):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
- if (!$items.length) return
-
- var index = $items.index(e.target)
-
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items.eq(index).trigger('focus')
- }
-
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
- })
- }
-
- function getParent($this) {
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = selector && $(selector)
-
- return $parent && $parent.length ? $parent : $this.parent()
- }
-
-
- // DROPDOWN PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.dropdown')
-
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.dropdown
-
- $.fn.dropdown = Plugin
- $.fn.dropdown.Constructor = Dropdown
-
-
- // DROPDOWN NO CONFLICT
- // ====================
-
- $.fn.dropdown.noConflict = function () {
- $.fn.dropdown = old
- return this
- }
-
-
- // APPLY TO STANDARD DROPDOWN ELEMENTS
- // ===================================
-
- $(document)
- .on('click.bs.dropdown.data-api', clearMenus)
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.3.4
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // MODAL CLASS DEFINITION
- // ======================
-
- var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$dialog = this.$element.find('.modal-dialog')
- this.$backdrop = null
- this.isShown = null
- this.originalBodyPad = null
- this.scrollbarWidth = 0
- this.ignoreBackdropClick = false
-
- if (this.options.remote) {
- this.$element
- .find('.modal-content')
- .load(this.options.remote, $.proxy(function () {
- this.$element.trigger('loaded.bs.modal')
- }, this))
- }
- }
-
- Modal.VERSION = '3.3.4'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.setScrollbar()
- this.$body.addClass('modal-open')
-
- this.escape()
- this.resize()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
- })
- })
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(that.$body) // don't move modals dom position
- }
-
- that.$element
- .show()
- .scrollTop(0)
-
- that.adjustDialog()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
-
- that.enforceFocus()
-
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
- transition ?
- that.$dialog // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
- this.resize()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
- .off('mouseup.dismiss.bs.modal')
-
- this.$dialog.off('mousedown.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.resize = function () {
- if (this.isShown) {
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
- } else {
- $(window).off('resize.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetAdjustments()
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(this.$body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (this.ignoreBackdropClick) {
- this.ignoreBackdropClick = false
- return
- }
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus()
- : this.hide()
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- // these following methods are used to handle overflowing modals
-
- Modal.prototype.handleUpdate = function () {
- this.adjustDialog()
- }
-
- Modal.prototype.adjustDialog = function () {
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
-
- this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
- })
- }
-
- Modal.prototype.resetAdjustments = function () {
- this.$element.css({
- paddingLeft: '',
- paddingRight: ''
- })
- }
-
- Modal.prototype.checkScrollbar = function () {
- var fullWindowWidth = window.innerWidth
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
- var documentElementRect = document.documentElement.getBoundingClientRect()
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
- }
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- this.originalBodyPad = document.body.style.paddingRight || ''
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', this.originalBodyPad)
- }
-
- Modal.prototype.measureScrollbar = function () { // thx walsh
- var scrollDiv = document.createElement('div')
- scrollDiv.className = 'modal-scrollbar-measure'
- this.$body.append(scrollDiv)
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
- this.$body[0].removeChild(scrollDiv)
- return scrollbarWidth
- }
-
-
- // MODAL PLUGIN DEFINITION
- // =======================
-
- function Plugin(option, _relatedTarget) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option](_relatedTarget)
- else if (options.show) data.show(_relatedTarget)
- })
- }
-
- var old = $.fn.modal
-
- $.fn.modal = Plugin
- $.fn.modal.Constructor = Modal
-
-
- // MODAL NO CONFLICT
- // =================
-
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
-
- // MODAL DATA-API
- // ==============
-
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- if ($this.is('a')) e.preventDefault()
-
- $target.one('show.bs.modal', function (showEvent) {
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
- $target.one('hidden.bs.modal', function () {
- $this.is(':visible') && $this.trigger('focus')
- })
- })
- Plugin.call($target, option, this)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.3.4
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TOOLTIP PUBLIC CLASS DEFINITION
- // ===============================
-
- var Tooltip = function (element, options) {
- this.type = null
- this.options = null
- this.enabled = null
- this.timeout = null
- this.hoverState = null
- this.$element = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.3.4'
-
- Tooltip.TRANSITION_DURATION = 150
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
-
- if (this.$element[0] instanceof document.constructor && !this.options.selector) {
- throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
- }
-
- var triggers = this.options.trigger.split(' ')
-
- for (var i = triggers.length; i--;) {
- var trigger = triggers[i]
-
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- Tooltip.prototype.getDefaults = function () {
- return Tooltip.DEFAULTS
- }
-
- Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay,
- hide: options.delay
- }
- }
-
- return options
- }
-
- Tooltip.prototype.getDelegateOptions = function () {
- var options = {}
- var defaults = this.getDefaults()
-
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- })
-
- return options
- }
-
- Tooltip.prototype.enter = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (self && self.$tip && self.$tip.is(':visible')) {
- self.hoverState = 'in'
- return
- }
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'in'
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- Tooltip.prototype.leave = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'out'
-
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- Tooltip.prototype.show = function () {
- var e = $.Event('show.bs.' + this.type)
-
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
-
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var $container = this.options.container ? $(this.options.container) : this.$element.parent()
- var containerDim = this.getPosition($container)
-
- placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- var prevHoverState = that.hoverState
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
-
- if (prevHoverState == 'out') that.leave(that)
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top = offset.top + marginTop
- offset.left = offset.left + marginLeft
-
- // $.fn.offset doesn't round pixel values
- // so we use setOffset directly with our own function B-0
- $.offset.setOffset($tip[0], $.extend({
- using: function (props) {
- $tip.css({
- top: Math.round(props.top),
- left: Math.round(props.left)
- })
- }
- }, offset), 0)
-
- $tip.addClass('in')
-
- // check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- }
-
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
- if (delta.left) offset.left += delta.left
- else offset.top += delta.top
-
- var isVertical = /top|bottom/.test(placement)
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
- this.arrow()
- .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isVertical ? 'top' : 'left', '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function (callback) {
- var that = this
- var $tip = $(this.$tip)
- var e = $.Event('hide.bs.' + this.type)
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
- callback && callback()
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && $tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
-
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
-
- var elRect = el.getBoundingClientRect()
- if (elRect.width == null) {
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
- }
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
-
- return $.extend({}, elRect, scroll, outerDims, elOffset)
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
- }
- }
-
- return delta
- }
-
- Tooltip.prototype.getTitle = function () {
- var title
- var $e = this.$element
- var o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- Tooltip.prototype.getUID = function (prefix) {
- do prefix += ~~(Math.random() * 1000000)
- while (document.getElementById(prefix))
- return prefix
- }
-
- Tooltip.prototype.tip = function () {
- return (this.$tip = this.$tip || $(this.options.template))
- }
-
- Tooltip.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
- }
-
- Tooltip.prototype.enable = function () {
- this.enabled = true
- }
-
- Tooltip.prototype.disable = function () {
- this.enabled = false
- }
-
- Tooltip.prototype.toggleEnabled = function () {
- this.enabled = !this.enabled
- }
-
- Tooltip.prototype.toggle = function (e) {
- var self = this
- if (e) {
- self = $(e.currentTarget).data('bs.' + this.type)
- if (!self) {
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
- $(e.currentTarget).data('bs.' + this.type, self)
- }
- }
-
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
- }
-
- Tooltip.prototype.destroy = function () {
- var that = this
- clearTimeout(this.timeout)
- this.hide(function () {
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
- })
- }
-
-
- // TOOLTIP PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.3.4
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // POPOVER PUBLIC CLASS DEFINITION
- // ===============================
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
- Popover.VERSION = '3.3.4'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
-
- // POPOVER PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.popover
-
- $.fn.popover = Plugin
- $.fn.popover.Constructor = Popover
-
-
- // POPOVER NO CONFLICT
- // ===================
-
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.4
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // SCROLLSPY CLASS DEFINITION
- // ==========================
-
- function ScrollSpy(element, options) {
- this.$body = $(document.body)
- this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
- this.selector = (this.options.target || '') + ' .nav li > a'
- this.offsets = []
- this.targets = []
- this.activeTarget = null
- this.scrollHeight = 0
-
- this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
- this.refresh()
- this.process()
- }
-
- ScrollSpy.VERSION = '3.3.4'
-
- ScrollSpy.DEFAULTS = {
- offset: 10
- }
-
- ScrollSpy.prototype.getScrollHeight = function () {
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
- }
-
- ScrollSpy.prototype.refresh = function () {
- var that = this
- var offsetMethod = 'offset'
- var offsetBase = 0
-
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- if (!$.isWindow(this.$scrollElement[0])) {
- offsetMethod = 'position'
- offsetBase = this.$scrollElement.scrollTop()
- }
-
- this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- var href = $el.data('target') || $el.attr('href')
- var $href = /^#./.test(href) && $(href)
-
- return ($href
- && $href.length
- && $href.is(':visible')
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- that.offsets.push(this[0])
- that.targets.push(this[1])
- })
- }
-
- ScrollSpy.prototype.process = function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- var scrollHeight = this.getScrollHeight()
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
- var offsets = this.offsets
- var targets = this.targets
- var activeTarget = this.activeTarget
- var i
-
- if (this.scrollHeight != scrollHeight) {
- this.refresh()
- }
-
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
- }
-
- if (activeTarget && scrollTop < offsets[0]) {
- this.activeTarget = null
- return this.clear()
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
- && this.activate(targets[i])
- }
- }
-
- ScrollSpy.prototype.activate = function (target) {
- this.activeTarget = target
-
- this.clear()
-
- var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
-
- var active = $(selector)
- .parents('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active
- .closest('li.dropdown')
- .addClass('active')
- }
-
- active.trigger('activate.bs.scrollspy')
- }
-
- ScrollSpy.prototype.clear = function () {
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
- }
-
-
- // SCROLLSPY PLUGIN DEFINITION
- // ===========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.scrollspy')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = Plugin
- $.fn.scrollspy.Constructor = ScrollSpy
-
-
- // SCROLLSPY NO CONFLICT
- // =====================
-
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
-
- // SCROLLSPY DATA-API
- // ==================
-
- $(window).on('load.bs.scrollspy.data-api', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- Plugin.call($spy, $spy.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.3.4
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TAB CLASS DEFINITION
- // ====================
-
- var Tab = function (element) {
- this.element = $(element)
- }
-
- Tab.VERSION = '3.3.4'
-
- Tab.TRANSITION_DURATION = 150
-
- Tab.prototype.show = function () {
- var $this = this.element
- var $ul = $this.closest('ul:not(.dropdown-menu)')
- var selector = $this.data('target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- if ($this.parent('li').hasClass('active')) return
-
- var $previous = $ul.find('.active:last a')
- var hideEvent = $.Event('hide.bs.tab', {
- relatedTarget: $this[0]
- })
- var showEvent = $.Event('show.bs.tab', {
- relatedTarget: $previous[0]
- })
-
- $previous.trigger(hideEvent)
- $this.trigger(showEvent)
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $previous.trigger({
- type: 'hidden.bs.tab',
- relatedTarget: $this[0]
- })
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: $previous[0]
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
-
- element
- .addClass('active')
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu').length) {
- element
- .closest('li.dropdown')
- .addClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
- }
-
- callback && callback()
- }
-
- $active.length && transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
- next()
-
- $active.removeClass('in')
- }
-
-
- // TAB PLUGIN DEFINITION
- // =====================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tab')
-
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tab
-
- $.fn.tab = Plugin
- $.fn.tab.Constructor = Tab
-
-
- // TAB NO CONFLICT
- // ===============
-
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
-
- // TAB DATA-API
- // ============
-
- var clickHandler = function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- }
-
- $(document)
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.3.4
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // AFFIX CLASS DEFINITION
- // ======================
-
- var Affix = function (element, options) {
- this.options = $.extend({}, Affix.DEFAULTS, options)
-
- this.$target = $(this.options.target)
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
-
- this.$element = $(element)
- this.affixed = null
- this.unpin = null
- this.pinnedOffset = null
-
- this.checkPosition()
- }
-
- Affix.VERSION = '3.3.4'
-
- Affix.RESET = 'affix affix-top affix-bottom'
-
- Affix.DEFAULTS = {
- offset: 0,
- target: window
- }
-
- Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- var targetHeight = this.$target.height()
-
- if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
-
- if (this.affixed == 'bottom') {
- if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
- return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
- }
-
- var initializing = this.affixed == null
- var colliderTop = initializing ? scrollTop : position.top
- var colliderHeight = initializing ? targetHeight : height
-
- if (offsetTop != null && scrollTop <= offsetTop) return 'top'
- if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
-
- return false
- }
-
- Affix.prototype.getPinnedOffset = function () {
- if (this.pinnedOffset) return this.pinnedOffset
- this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- return (this.pinnedOffset = position.top - scrollTop)
- }
-
- Affix.prototype.checkPositionWithEventLoop = function () {
- setTimeout($.proxy(this.checkPosition, this), 1)
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var height = this.$element.height()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
- var scrollHeight = $(document.body).height()
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
-
- if (this.affixed != affix) {
- if (this.unpin != null) this.$element.css('top', '')
-
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
- }
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - height - offsetBottom
- })
- }
- }
-
-
- // AFFIX PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.affix')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.affix
-
- $.fn.affix = Plugin
- $.fn.affix.Constructor = Affix
-
-
- // AFFIX NO CONFLICT
- // =================
-
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
-
- // AFFIX DATA-API
- // ==============
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- var data = $spy.data()
-
- data.offset = data.offset || {}
-
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
- if (data.offsetTop != null) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
diff --git a/web/nms-public.gathering.org/js/bootstrap.min.js b/web/nms-public.gathering.org/js/bootstrap.min.js
deleted file mode 100644
index c8f82e5..0000000
--- a/web/nms-public.gathering.org/js/bootstrap.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
-var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js b/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js
deleted file mode 100644
index 417037c..0000000
--- a/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js
+++ /dev/null
@@ -1,3073 +0,0 @@
-/*!
- * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015
- * @version 1.3.3
- *
- * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
- * @see http://php.net/manual/en/function.date.php
- *
- * For more JQuery plugins visit http://plugins.krajee.com
- * For more Yii related demos visit http://demos.krajee.com
- */
-var DateFormatter;
-(function () {
- "use strict";
-
- var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
- DAY = 1000 * 60 * 60 * 24;
- HOUR = 3600;
-
- _compare = function (str1, str2) {
- return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();
- };
- _lpad = function (value, length, char) {
- var chr = char || '0', val = value.toString();
- return val.length < length ? _lpad(chr + val, length) : val;
- };
- _extend = function (out) {
- var i, obj;
- out = out || {};
- for (i = 1; i < arguments.length; i++) {
- obj = arguments[i];
- if (!obj) {
- continue;
- }
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if (typeof obj[key] === 'object') {
- _extend(out[key], obj[key]);
- } else {
- out[key] = obj[key];
- }
- }
- }
- }
- return out;
- };
- defaultSettings = {
- dateSettings: {
- days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
- daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
- months: [
- 'January', 'February', 'March', 'April', 'May', 'June', 'July',
- 'August', 'September', 'October', 'November', 'December'
- ],
- monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- meridiem: ['AM', 'PM'],
- ordinal: function (number) {
- var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};
- return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];
- }
- },
- separators: /[ \-+\/\.T:@]/g,
- validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
- intParts: /[djwNzmnyYhHgGis]/g,
- tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
- tzClip: /[^-+\dA-Z]/g
- };
-
- DateFormatter = function (options) {
- var self = this, config = _extend(defaultSettings, options);
- self.dateSettings = config.dateSettings;
- self.separators = config.separators;
- self.validParts = config.validParts;
- self.intParts = config.intParts;
- self.tzParts = config.tzParts;
- self.tzClip = config.tzClip;
- };
-
- DateFormatter.prototype = {
- constructor: DateFormatter,
- parseDate: function (vDate, vFormat) {
- var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,
- vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
- out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
- if (!vDate) {
- return undefined;
- }
- if (vDate instanceof Date) {
- return vDate;
- }
- if (typeof vDate === 'number') {
- return new Date(vDate);
- }
- if (vFormat === 'U') {
- i = parseInt(vDate);
- return i ? new Date(i * 1000) : vDate;
- }
- if (typeof vDate !== 'string') {
- return '';
- }
- vFormatParts = vFormat.match(self.validParts);
- if (!vFormatParts || vFormatParts.length === 0) {
- throw new Error("Invalid date format definition.");
- }
- vDateParts = vDate.replace(self.separators, '\0').split('\0');
- for (i = 0; i < vDateParts.length; i++) {
- vDatePart = vDateParts[i];
- iDatePart = parseInt(vDatePart);
- switch (vFormatParts[i]) {
- case 'y':
- case 'Y':
- len = vDatePart.length;
- if (len === 2) {
- out.year = parseInt((iDatePart < 70 ? '20' : '19') + vDatePart);
- } else if (len === 4) {
- out.year = iDatePart;
- }
- vDateFlag = true;
- break;
- case 'm':
- case 'n':
- case 'M':
- case 'F':
- if (isNaN(vDatePart)) {
- vMonth = vSettings.monthsShort.indexOf(vDatePart);
- if (vMonth > -1) {
- out.month = vMonth + 1;
- }
- vMonth = vSettings.months.indexOf(vDatePart);
- if (vMonth > -1) {
- out.month = vMonth + 1;
- }
- } else {
- if (iDatePart >= 1 && iDatePart <= 12) {
- out.month = iDatePart;
- }
- }
- vDateFlag = true;
- break;
- case 'd':
- case 'j':
- if (iDatePart >= 1 && iDatePart <= 31) {
- out.day = iDatePart;
- }
- vDateFlag = true;
- break;
- case 'g':
- case 'h':
- vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
- (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;
- mer = vDateParts[vMeriIndex];
- if (vMeriIndex > -1) {
- vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :
- (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);
- if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {
- out.hour = iDatePart + vMeriOffset - 1;
- } else if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- } else if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 'G':
- case 'H':
- if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 'i':
- if (iDatePart >= 0 && iDatePart <= 59) {
- out.min = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 's':
- if (iDatePart >= 0 && iDatePart <= 59) {
- out.sec = iDatePart;
- }
- vTimeFlag = true;
- break;
- }
- }
- if (vDateFlag === true && out.year && out.month && out.day) {
- out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
- } else {
- if (vTimeFlag !== true) {
- return false;
- }
- out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
- }
- return out.date;
- },
- guessDate: function (vDateStr, vFormat) {
- if (typeof vDateStr !== 'string') {
- return vDateStr;
- }
- var self = this, vParts = vDateStr.replace(self.separators, '\0').split('\0'), vPattern = /^[djmn]/g,
- vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, iPart, iSec;
-
- if (!vPattern.test(vFormatParts[0])) {
- return vDateStr;
- }
-
- for (i = 0; i < vParts.length; i++) {
- vDigit = 2;
- iPart = vParts[i];
- iSec = parseInt(iPart.substr(0, 2));
- switch (i) {
- case 0:
- if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
- vDate.setMonth(iSec - 1);
- } else {
- vDate.setDate(iSec);
- }
- break;
- case 1:
- if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
- vDate.setDate(iSec);
- } else {
- vDate.setMonth(iSec - 1);
- }
- break;
- case 2:
- vYear = vDate.getFullYear();
- if (iPart.length < 4) {
- vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
- vDigit = iPart.length;
- } else {
- vDate.setFullYear = parseInt(iPart.substr(0, 4));
- vDigit = 4;
- }
- break;
- case 3:
- vDate.setHours(iSec);
- break;
- case 4:
- vDate.setMinutes(iSec);
- break;
- case 5:
- vDate.setSeconds(iSec);
- break;
- }
- if (iPart.substr(vDigit).length > 0) {
- vParts.splice(i + 1, 0, iPart.substr(vDigit));
- }
- }
- return vDate;
- },
- parseFormat: function (vChar, vDate) {
- var self = this, vSettings = self.dateSettings, fmt, backspace = /\\?(.?)/gi, doFormat = function (t, s) {
- return fmt[t] ? fmt[t]() : s;
- };
- fmt = {
- /////////
- // DAY //
- /////////
- /**
- * Day of month with leading 0: `01..31`
- * @return {string}
- */
- d: function () {
- return _lpad(fmt.j(), 2);
- },
- /**
- * Shorthand day name: `Mon...Sun`
- * @return {string}
- */
- D: function () {
- return vSettings.daysShort[fmt.w()];
- },
- /**
- * Day of month: `1..31`
- * @return {number}
- */
- j: function () {
- return vDate.getDate();
- },
- /**
- * Full day name: `Monday...Sunday`
- * @return {number}
- */
- l: function () {
- return vSettings.days[fmt.w()];
- },
- /**
- * ISO-8601 day of week: `1[Mon]..7[Sun]`
- * @return {number}
- */
- N: function () {
- return fmt.w() || 7;
- },
- /**
- * Day of week: `0[Sun]..6[Sat]`
- * @return {number}
- */
- w: function () {
- return vDate.getDay();
- },
- /**
- * Day of year: `0..365`
- * @return {number}
- */
- z: function () {
- var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);
- return Math.round((a - b) / DAY);
- },
-
- //////////
- // WEEK //
- //////////
- /**
- * ISO-8601 week number
- * @return {number}
- */
- W: function () {
- var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);
- return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
- },
-
- ///////////
- // MONTH //
- ///////////
- /**
- * Full month name: `January...December`
- * @return {string}
- */
- F: function () {
- return vSettings.months[vDate.getMonth()];
- },
- /**
- * Month w/leading 0: `01..12`
- * @return {string}
- */
- m: function () {
- return _lpad(fmt.n(), 2);
- },
- /**
- * Shorthand month name; `Jan...Dec`
- * @return {string}
- */
- M: function () {
- return vSettings.monthsShort[vDate.getMonth()];
- },
- /**
- * Month: `1...12`
- * @return {number}
- */
- n: function () {
- return vDate.getMonth() + 1;
- },
- /**
- * Days in month: `28...31`
- * @return {number}
- */
- t: function () {
- return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
- },
-
- //////////
- // YEAR //
- //////////
- /**
- * Is leap year? `0 or 1`
- * @return {number}
- */
- L: function () {
- var Y = fmt.Y();
- return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;
- },
- /**
- * ISO-8601 year
- * @return {number}
- */
- o: function () {
- var n = fmt.n(), W = fmt.W(), Y = fmt.Y();
- return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);
- },
- /**
- * Full year: `e.g. 1980...2010`
- * @return {number}
- */
- Y: function () {
- return vDate.getFullYear();
- },
- /**
- * Last two digits of year: `00...99`
- * @return {string}
- */
- y: function () {
- return fmt.Y().toString().slice(-2);
- },
-
- //////////
- // TIME //
- //////////
- /**
- * Meridian lower: `am or pm`
- * @return {string}
- */
- a: function () {
- return fmt.A().toLowerCase();
- },
- /**
- * Meridian upper: `AM or PM`
- * @return {string}
- */
- A: function () {
- var n = fmt.G() < 12 ? 0 : 1;
- return vSettings.meridiem[n];
- },
- /**
- * Swatch Internet time: `000..999`
- * @return {string}
- */
- B: function () {
- var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();
- return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
- },
- /**
- * 12-Hours: `1..12`
- * @return {number}
- */
- g: function () {
- return fmt.G() % 12 || 12;
- },
- /**
- * 24-Hours: `0..23`
- * @return {number}
- */
- G: function () {
- return vDate.getHours();
- },
- /**
- * 12-Hours with leading 0: `01..12`
- * @return {string}
- */
- h: function () {
- return _lpad(fmt.g(), 2);
- },
- /**
- * 24-Hours w/leading 0: `00..23`
- * @return {string}
- */
- H: function () {
- return _lpad(fmt.G(), 2);
- },
- /**
- * Minutes w/leading 0: `00..59`
- * @return {string}
- */
- i: function () {
- return _lpad(vDate.getMinutes(), 2);
- },
- /**
- * Seconds w/leading 0: `00..59`
- * @return {string}
- */
- s: function () {
- return _lpad(vDate.getSeconds(), 2);
- },
- /**
- * Microseconds: `000000-999000`
- * @return {string}
- */
- u: function () {
- return _lpad(vDate.getMilliseconds() * 1000, 6);
- },
-
- //////////////
- // TIMEZONE //
- //////////////
- /**
- * Timezone identifier: `e.g. Atlantic/Azores, ...`
- * @return {string}
- */
- e: function () {
- var str = /\((.*)\)/.exec(String(vDate))[1];
- return str || 'Coordinated Universal Time';
- },
- /**
- * Timezone abbreviation: `e.g. EST, MDT, ...`
- * @return {string}
- */
- T: function () {
- var str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip, "");
- return str || 'UTC';
- },
- /**
- * DST observed? `0 or 1`
- * @return {number}
- */
- I: function () {
- var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),
- b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);
- return ((a - c) !== (b - d)) ? 1 : 0;
- },
- /**
- * Difference to GMT in hour format: `e.g. +0200`
- * @return {string}
- */
- O: function () {
- var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);
- return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
- },
- /**
- * Difference to GMT with colon: `e.g. +02:00`
- * @return {string}
- */
- P: function () {
- var O = fmt.O();
- return (O.substr(0, 3) + ':' + O.substr(3, 2));
- },
- /**
- * Timezone offset in seconds: `-43200...50400`
- * @return {number}
- */
- Z: function () {
- return -vDate.getTimezoneOffset() * 60;
- },
-
- ////////////////////
- // FULL DATE TIME //
- ////////////////////
- /**
- * ISO-8601 date
- * @return {string}
- */
- c: function () {
- return 'Y-m-d\\TH:i:s'.replace(backspace, doFormat);
- },
- /**
- * RFC 2822 date
- * @return {string}
- */
- r: function () {
- return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
- },
- /**
- * Seconds since UNIX epoch
- * @return {number}
- */
- U: function () {
- return vDate.getTime() / 1000 || 0;
- }
- };
- return doFormat(vChar, vChar);
- },
- formatDate: function (vDate, vFormat) {
- var self = this, i, n, len, str, vChar, vDateStr = '';
- if (typeof vDate === 'string') {
- vDate = self.parseDate(vDate, vFormat);
- if (vDate === false) {
- return false;
- }
- }
- if (vDate instanceof Date) {
- len = vFormat.length;
- for (i = 0; i < len; i++) {
- vChar = vFormat.charAt(i);
- if (vChar === 'S') {
- continue;
- }
- str = self.parseFormat(vChar, vDate);
- if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {
- n = parseInt(str);
- str += self.dateSettings.ordinal(n);
- }
- vDateStr += str;
- }
- return vDateStr;
- }
- return '';
- }
- };
-})();/**
- * @preserve jQuery DateTimePicker plugin v2.5.1
- * @homepage http://xdsoft.net/jqplugins/datetimepicker/
- * @author Chupurnov Valeriy (<chupurnov@gmail.com>)
- */
-/*global DateFormatter, document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/
-;(function (factory) {
- if ( typeof define === 'function' && define.amd ) {
- // AMD. Register as an anonymous module.
- define(['jquery', 'jquery-mousewheel'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS style for Browserify
- module.exports = factory;
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function ($) {
- 'use strict';
- var default_options = {
- i18n: {
- ar: { // Arabic
- months: [
- "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
- ],
- dayOfWeekShort: [
- "ن", "ث", "ع", "خ", "ج", "س", "ح"
- ],
- dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
- },
- ro: { // Romanian
- months: [
- "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
- ],
- dayOfWeekShort: [
- "Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
- ],
- dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
- },
- id: { // Indonesian
- months: [
- "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
- ],
- dayOfWeekShort: [
- "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
- ],
- dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
- },
- is: { // Icelandic
- months: [
- "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
- ],
- dayOfWeekShort: [
- "Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
- ],
- dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
- },
- bg: { // Bulgarian
- months: [
- "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
- ],
- dayOfWeekShort: [
- "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
- ],
- dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
- },
- fa: { // Persian/Farsi
- months: [
- 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
- ],
- dayOfWeekShort: [
- 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
- ],
- dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
- },
- ru: { // Russian
- months: [
- 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
- ],
- dayOfWeekShort: [
- "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
- ],
- dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
- },
- uk: { // Ukrainian
- months: [
- 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
- ],
- dayOfWeekShort: [
- "Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
- ],
- dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
- },
- en: { // English
- months: [
- "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- ],
- dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
- },
- el: { // Ελληνικά
- months: [
- "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
- ],
- dayOfWeekShort: [
- "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
- ],
- dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
- },
- de: { // German
- months: [
- 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
- ],
- dayOfWeekShort: [
- "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
- ],
- dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
- },
- nl: { // Dutch
- months: [
- "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
- ],
- dayOfWeekShort: [
- "zo", "ma", "di", "wo", "do", "vr", "za"
- ],
- dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
- },
- tr: { // Turkish
- months: [
- "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
- ],
- dayOfWeekShort: [
- "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
- ],
- dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
- },
- fr: { //French
- months: [
- "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
- ],
- dayOfWeekShort: [
- "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
- ],
- dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
- },
- es: { // Spanish
- months: [
- "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
- ],
- dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
- },
- th: { // Thai
- months: [
- 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
- ],
- dayOfWeekShort: [
- 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
- ],
- dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
- },
- pl: { // Polish
- months: [
- "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
- ],
- dayOfWeekShort: [
- "nd", "pn", "wt", "śr", "cz", "pt", "sb"
- ],
- dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
- },
- pt: { // Portuguese
- months: [
- "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
- ],
- dayOfWeekShort: [
- "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
- ],
- dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
- },
- ch: { // Simplified Chinese
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ]
- },
- se: { // Swedish
- months: [
- "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
- ]
- },
- kr: { // Korean
- months: [
- "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
- ],
- dayOfWeekShort: [
- "일", "월", "화", "수", "목", "금", "토"
- ],
- dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
- },
- it: { // Italian
- months: [
- "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
- ],
- dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
- },
- da: { // Dansk
- months: [
- "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
- ],
- dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
- },
- no: { // Norwegian
- months: [
- "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
- ],
- dayOfWeekShort: [
- "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
- ],
- dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
- },
- ja: { // Japanese
- months: [
- "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
- ],
- dayOfWeekShort: [
- "日", "月", "火", "水", "木", "金", "土"
- ],
- dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
- },
- vi: { // Vietnamese
- months: [
- "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
- ],
- dayOfWeekShort: [
- "CN", "T2", "T3", "T4", "T5", "T6", "T7"
- ],
- dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
- },
- sl: { // Slovenščina
- months: [
- "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
- ],
- dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
- },
- cs: { // Čeština
- months: [
- "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
- ],
- dayOfWeekShort: [
- "Ne", "Po", "Út", "St", "Čt", "Pá", "So"
- ]
- },
- hu: { // Hungarian
- months: [
- "Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
- ],
- dayOfWeekShort: [
- "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
- ],
- dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
- },
- az: { //Azerbaijanian (Azeri)
- months: [
- "Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
- ],
- dayOfWeekShort: [
- "B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
- ],
- dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
- },
- bs: { //Bosanski
- months: [
- "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
- },
- ca: { //Català
- months: [
- "Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
- ],
- dayOfWeekShort: [
- "Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
- ],
- dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
- },
- 'en-GB': { //English (British)
- months: [
- "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- ],
- dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
- },
- et: { //"Eesti"
- months: [
- "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
- ],
- dayOfWeekShort: [
- "P", "E", "T", "K", "N", "R", "L"
- ],
- dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
- },
- eu: { //Euskara
- months: [
- "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
- ],
- dayOfWeekShort: [
- "Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
- ],
- dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
- },
- fi: { //Finnish (Suomi)
- months: [
- "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
- ],
- dayOfWeekShort: [
- "Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
- ],
- dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
- },
- gl: { //Galego
- months: [
- "Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
- ],
- dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
- },
- hr: { //Hrvatski
- months: [
- "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
- },
- ko: { //Korean (한국어)
- months: [
- "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
- ],
- dayOfWeekShort: [
- "일", "월", "화", "수", "목", "금", "토"
- ],
- dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
- },
- lt: { //Lithuanian (lietuvių)
- months: [
- "Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
- ],
- dayOfWeekShort: [
- "Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
- ],
- dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
- },
- lv: { //Latvian (Latviešu)
- months: [
- "Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
- ],
- dayOfWeekShort: [
- "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
- ],
- dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
- },
- mk: { //Macedonian (Македонски)
- months: [
- "јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
- ],
- dayOfWeekShort: [
- "нед", "пон", "вто", "сре", "чет", "пет", "саб"
- ],
- dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
- },
- mn: { //Mongolian (Монгол)
- months: [
- "1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
- ],
- dayOfWeekShort: [
- "Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
- ],
- dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
- },
- 'pt-BR': { //Português(Brasil)
- months: [
- "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
- ],
- dayOfWeekShort: [
- "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
- ],
- dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
- },
- sk: { //Slovenčina
- months: [
- "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
- ],
- dayOfWeekShort: [
- "Ne", "Po", "Ut", "St", "Št", "Pi", "So"
- ],
- dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
- },
- sq: { //Albanian (Shqip)
- months: [
- "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
- ],
- dayOfWeekShort: [
- "Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
- ],
- dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
- },
- 'sr-YU': { //Serbian (Srpski)
- months: [
- "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
- },
- sr: { //Serbian Cyrillic (Српски)
- months: [
- "јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
- ],
- dayOfWeekShort: [
- "нед", "пон", "уто", "сре", "чет", "пет", "суб"
- ],
- dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
- },
- sv: { //Svenska
- months: [
- "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
- ],
- dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
- },
- 'zh-TW': { //Traditional Chinese (繁體中文)
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ],
- dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
- },
- zh: { //Simplified Chinese (简体中文)
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ],
- dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
- },
- he: { //Hebrew (עברית)
- months: [
- 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
- ],
- dayOfWeekShort: [
- 'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
- ],
- dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
- },
- hy: { // Armenian
- months: [
- "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
- ],
- dayOfWeekShort: [
- "Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
- ],
- dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
- },
- kg: { // Kyrgyz
- months: [
- 'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
- ],
- dayOfWeekShort: [
- "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
- ],
- dayOfWeek: [
- "Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
- ]
- },
- rm: { // Romansh
- months: [
- "Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Du", "Gli", "Ma", "Me", "Gie", "Ve", "So"
- ],
- dayOfWeek: [
- "Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
- ]
- },
- },
- value: '',
- rtl: false,
-
- format: 'Y/m/d H:i',
- formatTime: 'H:i',
- formatDate: 'Y/m/d',
-
- startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
- step: 60,
- monthChangeSpinner: true,
-
- closeOnDateSelect: false,
- closeOnTimeSelect: true,
- closeOnWithoutClick: true,
- closeOnInputClick: true,
-
- timepicker: true,
- datepicker: true,
- weeks: false,
-
- defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i')
- defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')
-
- minDate: false,
- maxDate: false,
- minTime: false,
- maxTime: false,
- disabledMinTime: false,
- disabledMaxTime: false,
-
- allowTimes: [],
- opened: false,
- initTime: true,
- inline: false,
- theme: '',
-
- onSelectDate: function () {},
- onSelectTime: function () {},
- onChangeMonth: function () {},
- onGetWeekOfYear: function () {},
- onChangeYear: function () {},
- onChangeDateTime: function () {},
- onShow: function () {},
- onClose: function () {},
- onGenerate: function () {},
-
- withoutCopyright: true,
- inverseButton: false,
- hours12: false,
- next: 'xdsoft_next',
- prev : 'xdsoft_prev',
- dayOfWeekStart: 0,
- parentID: 'body',
- timeHeightInTimePicker: 25,
- timepickerScrollbar: true,
- todayButton: true,
- prevButton: true,
- nextButton: true,
- defaultSelect: true,
-
- scrollMonth: true,
- scrollTime: true,
- scrollInput: true,
-
- lazyInit: false,
- mask: false,
- validateOnBlur: true,
- allowBlank: true,
- yearStart: 1950,
- yearEnd: 2050,
- monthStart: 0,
- monthEnd: 11,
- style: '',
- id: '',
- fixed: false,
- roundTime: 'round', // ceil, floor
- className: '',
- weekends: [],
- highlightedDates: [],
- highlightedPeriods: [],
- allowDates : [],
- allowDateRe : null,
- disabledDates : [],
- disabledWeekDays: [],
- yearOffset: 0,
- beforeShowDay: null,
-
- enterLikeTab: true,
- showApplyButton: false
- };
-
- var dateHelper = null,
- globalLocaleDefault = 'en',
- globalLocale = 'en';
-
- var dateFormatterOptionsDefault = {
- meridiem: ['AM', 'PM']
- };
-
- var initDateFormatter = function(){
- var locale = default_options.i18n[globalLocale],
- opts = {
- days: locale.dayOfWeek,
- daysShort: locale.dayOfWeekShort,
- months: locale.months,
- monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
- };
-
- dateHelper = new DateFormatter({
- dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
- });
- };
-
- // for locale settings
- $.datetimepicker = {
- setLocale: function(locale){
- var newLocale = default_options.i18n[locale]?locale:globalLocaleDefault;
- if(globalLocale != newLocale){
- globalLocale = newLocale;
- // reinit date formatter
- initDateFormatter();
- }
- },
- RFC_2822: 'D, d M Y H:i:s O',
- ATOM: 'Y-m-d\TH:i:sP',
- ISO_8601: 'Y-m-d\TH:i:sO',
- RFC_822: 'D, d M y H:i:s O',
- RFC_850: 'l, d-M-y H:i:s T',
- RFC_1036: 'D, d M y H:i:s O',
- RFC_1123: 'D, d M Y H:i:s O',
- RSS: 'D, d M Y H:i:s O',
- W3C: 'Y-m-d\TH:i:sP'
- };
-
- // first init date formatter
- initDateFormatter();
-
- // fix for ie8
- if (!window.getComputedStyle) {
- window.getComputedStyle = function (el, pseudo) {
- this.el = el;
- this.getPropertyValue = function (prop) {
- var re = /(\-([a-z]){1})/g;
- if (prop === 'float') {
- prop = 'styleFloat';
- }
- if (re.test(prop)) {
- prop = prop.replace(re, function (a, b, c) {
- return c.toUpperCase();
- });
- }
- return el.currentStyle[prop] || null;
- };
- return this;
- };
- }
- if (!Array.prototype.indexOf) {
- Array.prototype.indexOf = function (obj, start) {
- var i, j;
- for (i = (start || 0), j = this.length; i < j; i += 1) {
- if (this[i] === obj) { return i; }
- }
- return -1;
- };
- }
- Date.prototype.countDaysInMonth = function () {
- return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
- };
- $.fn.xdsoftScroller = function (percent) {
- return this.each(function () {
- var timeboxparent = $(this),
- pointerEventToXY = function (e) {
- var out = {x: 0, y: 0},
- touch;
- if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
- touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
- out.x = touch.clientX;
- out.y = touch.clientY;
- } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
- out.x = e.clientX;
- out.y = e.clientY;
- }
- return out;
- },
- move = 0,
- timebox,
- parentHeight,
- height,
- scrollbar,
- scroller,
- maximumOffset = 100,
- start = false,
- startY = 0,
- startTop = 0,
- h1 = 0,
- touchStart = false,
- startTopScroll = 0,
- calcOffset = function () {};
- if (percent === 'hide') {
- timeboxparent.find('.xdsoft_scrollbar').hide();
- return;
- }
- if (!$(this).hasClass('xdsoft_scroller_box')) {
- timebox = timeboxparent.children().eq(0);
- parentHeight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- scrollbar = $('<div class="xdsoft_scrollbar"></div>');
- scroller = $('<div class="xdsoft_scroller"></div>');
- scrollbar.append(scroller);
-
- timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
- calcOffset = function calcOffset(event) {
- var offset = pointerEventToXY(event).y - startY + startTopScroll;
- if (offset < 0) {
- offset = 0;
- }
- if (offset + scroller[0].offsetHeight > h1) {
- offset = h1 - scroller[0].offsetHeight;
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);
- };
-
- scroller
- .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
- if (!parentHeight) {
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
- }
-
- startY = pointerEventToXY(event).y;
- startTopScroll = parseInt(scroller.css('margin-top'), 10);
- h1 = scrollbar[0].offsetHeight;
-
- if (event.type === 'mousedown' || event.type === 'touchstart') {
- if (document) {
- $(document.body).addClass('xdsoft_noselect');
- }
- $([document.body, window]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {
- $([document.body, window]).off('touchend mouseup.xdsoft_scroller', arguments_callee)
- .off('mousemove.xdsoft_scroller', calcOffset)
- .removeClass('xdsoft_noselect');
- });
- $(document.body).on('mousemove.xdsoft_scroller', calcOffset);
- } else {
- touchStart = true;
- event.stopPropagation();
- event.preventDefault();
- }
- })
- .on('touchmove', function (event) {
- if (touchStart) {
- event.preventDefault();
- calcOffset(event);
- }
- })
- .on('touchend touchcancel', function (event) {
- touchStart = false;
- startTopScroll = 0;
- });
-
- timeboxparent
- .on('scroll_element.xdsoft_scroller', function (event, percentage) {
- if (!parentHeight) {
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
- }
- percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;
-
- scroller.css('margin-top', maximumOffset * percentage);
-
- setTimeout(function () {
- timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
- }, 10);
- })
- .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {
- var percent, sh;
- parentHeight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- percent = parentHeight / height;
- sh = percent * scrollbar[0].offsetHeight;
- if (percent > 1) {
- scroller.hide();
- } else {
- scroller.show();
- scroller.css('height', parseInt(sh > 10 ? sh : 10, 10));
- maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;
- if (noTriggerScroll !== true) {
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
- }
- }
- });
-
- timeboxparent.on('mousewheel', function (event) {
- var top = Math.abs(parseInt(timebox.css('marginTop'), 10));
-
- top = top - (event.deltaY * 20);
- if (top < 0) {
- top = 0;
- }
-
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
- event.stopPropagation();
- return false;
- });
-
- timeboxparent.on('touchstart', function (event) {
- start = pointerEventToXY(event);
- startTop = Math.abs(parseInt(timebox.css('marginTop'), 10));
- });
-
- timeboxparent.on('touchmove', function (event) {
- if (start) {
- event.preventDefault();
- var coord = pointerEventToXY(event);
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
- }
- });
-
- timeboxparent.on('touchend touchcancel', function (event) {
- start = false;
- startTop = 0;
- });
- }
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
- });
- };
-
- $.fn.datetimepicker = function (opt, opt2) {
- var result = this,
- KEY0 = 48,
- KEY9 = 57,
- _KEY0 = 96,
- _KEY9 = 105,
- CTRLKEY = 17,
- DEL = 46,
- ENTER = 13,
- ESC = 27,
- BACKSPACE = 8,
- ARROWLEFT = 37,
- ARROWUP = 38,
- ARROWRIGHT = 39,
- ARROWDOWN = 40,
- TAB = 9,
- F5 = 116,
- AKEY = 65,
- CKEY = 67,
- VKEY = 86,
- ZKEY = 90,
- YKEY = 89,
- ctrlDown = false,
- options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),
-
- lazyInitTimer = 0,
- createDateTimePicker,
- destroyDateTimePicker,
-
- lazyInit = function (input) {
- input
- .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(event) {
- if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
- return;
- }
- clearTimeout(lazyInitTimer);
- lazyInitTimer = setTimeout(function () {
-
- if (!input.data('xdsoft_datetimepicker')) {
- createDateTimePicker(input);
- }
- input
- .off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)
- .trigger('open.xdsoft');
- }, 100);
- });
- };
-
- createDateTimePicker = function (input) {
- var datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
- xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
- datepicker = $('<div class="xdsoft_datepicker active"></div>'),
- mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
- '<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
- '<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
- '<button type="button" class="xdsoft_next"></button></div>'),
- calendar = $('<div class="xdsoft_calendar"></div>'),
- timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
- timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
- timebox = $('<div class="xdsoft_time_variant"></div>'),
- applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
-
- monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
- yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
- triggerAfterOpen = false,
- XDSoft_datetime,
-
- xchangeTimer,
- timerclick,
- current_time_index,
- setPos,
- timer = 0,
- timer1 = 0,
- _xdsoft_datetime;
-
- if (options.id) {
- datetimepicker.attr('id', options.id);
- }
- if (options.style) {
- datetimepicker.attr('style', options.style);
- }
- if (options.weeks) {
- datetimepicker.addClass('xdsoft_showweeks');
- }
- if (options.rtl) {
- datetimepicker.addClass('xdsoft_rtl');
- }
-
- datetimepicker.addClass('xdsoft_' + options.theme);
- datetimepicker.addClass(options.className);
-
- mounth_picker
- .find('.xdsoft_month span')
- .after(monthselect);
- mounth_picker
- .find('.xdsoft_year span')
- .after(yearselect);
-
- mounth_picker
- .find('.xdsoft_month,.xdsoft_year')
- .on('touchstart mousedown.xdsoft', function (event) {
- var select = $(this).find('.xdsoft_select').eq(0),
- val = 0,
- top = 0,
- visible = select.is(':visible'),
- items,
- i;
-
- mounth_picker
- .find('.xdsoft_select')
- .hide();
- if (_xdsoft_datetime.currentTime) {
- val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();
- }
-
- select[visible ? 'hide' : 'show']();
- for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {
- if (items.eq(i).data('value') === val) {
- break;
- } else {
- top += items[0].offsetHeight;
- }
- }
-
- select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
- event.stopPropagation();
- return false;
- });
-
- mounth_picker
- .find('.xdsoft_select')
- .xdsoftScroller()
- .on('touchstart mousedown.xdsoft', function (event) {
- event.stopPropagation();
- event.preventDefault();
- })
- .on('touchstart mousedown.xdsoft', '.xdsoft_option', function (event) {
- if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- }
-
- var year = _xdsoft_datetime.currentTime.getFullYear();
- if (_xdsoft_datetime && _xdsoft_datetime.currentTime) {
- _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));
- }
-
- $(this).parent().parent().hide();
-
- datetimepicker.trigger('xchange.xdsoft');
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
- options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- });
-
- datetimepicker.getValue = function () {
- return _xdsoft_datetime.getCurrentTime();
- };
-
- datetimepicker.setOptions = function (_options) {
- var highlightedDates = {};
-
-
- options = $.extend(true, {}, options, _options);
-
- if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
- options.allowTimes = $.extend(true, [], _options.allowTimes);
- }
-
- if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
- options.weekends = $.extend(true, [], _options.weekends);
- }
-
- if (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {
- options.allowDates = $.extend(true, [], _options.allowDates);
- }
-
- if (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)==="[object String]") {
- options.allowDateRe = new RegExp(_options.allowDateRe);
- }
-
- if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
- $.each(_options.highlightedDates, function (index, value) {
- var splitData = $.map(value.split(','), $.trim),
- exDesc,
- hDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style
- keyDate = dateHelper.formatDate(hDate.date, options.formatDate);
- if (highlightedDates[keyDate] !== undefined) {
- exDesc = highlightedDates[keyDate].desc;
- if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
- highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
- }
- } else {
- highlightedDates[keyDate] = hDate;
- }
- });
-
- options.highlightedDates = $.extend(true, [], highlightedDates);
- }
-
- if (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {
- highlightedDates = $.extend(true, [], options.highlightedDates);
- $.each(_options.highlightedPeriods, function (index, value) {
- var dateTest, // start date
- dateEnd,
- desc,
- hDate,
- keyDate,
- exDesc,
- style;
- if ($.isArray(value)) {
- dateTest = value[0];
- dateEnd = value[1];
- desc = value[2];
- style = value[3];
- }
- else {
- var splitData = $.map(value.split(','), $.trim);
- dateTest = dateHelper.parseDate(splitData[0], options.formatDate);
- dateEnd = dateHelper.parseDate(splitData[1], options.formatDate);
- desc = splitData[2];
- style = splitData[3];
- }
-
- while (dateTest <= dateEnd) {
- hDate = new HighlightedDate(dateTest, desc, style);
- keyDate = dateHelper.formatDate(dateTest, options.formatDate);
- dateTest.setDate(dateTest.getDate() + 1);
- if (highlightedDates[keyDate] !== undefined) {
- exDesc = highlightedDates[keyDate].desc;
- if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
- highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
- }
- } else {
- highlightedDates[keyDate] = hDate;
- }
- }
- });
-
- options.highlightedDates = $.extend(true, [], highlightedDates);
- }
-
- if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
- options.disabledDates = $.extend(true, [], _options.disabledDates);
- }
-
- if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
- options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
- }
-
- if ((options.open || options.opened) && (!options.inline)) {
- input.trigger('open.xdsoft');
- }
-
- if (options.inline) {
- triggerAfterOpen = true;
- datetimepicker.addClass('xdsoft_inline');
- input.after(datetimepicker).hide();
- }
-
- if (options.inverseButton) {
- options.next = 'xdsoft_prev';
- options.prev = 'xdsoft_next';
- }
-
- if (options.datepicker) {
- datepicker.addClass('active');
- } else {
- datepicker.removeClass('active');
- }
-
- if (options.timepicker) {
- timepicker.addClass('active');
- } else {
- timepicker.removeClass('active');
- }
-
- if (options.value) {
- _xdsoft_datetime.setCurrentTime(options.value);
- if (input && input.val) {
- input.val(_xdsoft_datetime.str);
- }
- }
-
- if (isNaN(options.dayOfWeekStart)) {
- options.dayOfWeekStart = 0;
- } else {
- options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;
- }
-
- if (!options.timepickerScrollbar) {
- timeboxparent.xdsoftScroller('hide');
- }
-
- if (options.minDate && /^[\+\-](.*)$/.test(options.minDate)) {
- options.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
- }
-
- if (options.maxDate && /^[\+\-](.*)$/.test(options.maxDate)) {
- options.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
- }
-
- applyButton.toggle(options.showApplyButton);
-
- mounth_picker
- .find('.xdsoft_today_button')
- .css('visibility', !options.todayButton ? 'hidden' : 'visible');
-
- mounth_picker
- .find('.' + options.prev)
- .css('visibility', !options.prevButton ? 'hidden' : 'visible');
-
- mounth_picker
- .find('.' + options.next)
- .css('visibility', !options.nextButton ? 'hidden' : 'visible');
-
- setMask(options);
-
- if (options.validateOnBlur) {
- input
- .off('blur.xdsoft')
- .on('blur.xdsoft', function () {
- if (options.allowBlank && (!$.trim($(this).val()).length || $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_'))) {
- $(this).val(null);
- datetimepicker.data('xdsoft_datetime').empty();
- } else if (!dateHelper.parseDate($(this).val(), options.format)) {
- var splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')),
- splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));
-
- // parse the numbers as 0312 => 03:12
- if (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {
- $(this).val([splittedHours, splittedMinutes].map(function (item) {
- return item > 9 ? item : '0' + item;
- }).join(':'));
- } else {
- $(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
- }
-
- datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
- } else {
- datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
- }
-
- datetimepicker.trigger('changedatetime.xdsoft');
- datetimepicker.trigger('close.xdsoft');
- });
- }
- options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;
-
- datetimepicker
- .trigger('xchange.xdsoft')
- .trigger('afterOpen.xdsoft');
- };
-
- datetimepicker
- .data('options', options)
- .on('touchstart mousedown.xdsoft', function (event) {
- event.stopPropagation();
- event.preventDefault();
- yearselect.hide();
- monthselect.hide();
- return false;
- });
-
- //scroll_element = timepicker.find('.xdsoft_time_box');
- timeboxparent.append(timebox);
- timeboxparent.xdsoftScroller();
-
- datetimepicker.on('afterOpen.xdsoft', function () {
- timeboxparent.xdsoftScroller();
- });
-
- datetimepicker
- .append(datepicker)
- .append(timepicker);
-
- if (options.withoutCopyright !== true) {
- datetimepicker
- .append(xdsoft_copyright);
- }
-
- datepicker
- .append(mounth_picker)
- .append(calendar)
- .append(applyButton);
-
- $(options.parentID)
- .append(datetimepicker);
-
- XDSoft_datetime = function () {
- var _this = this;
- _this.now = function (norecursion) {
- var d = new Date(),
- date,
- time;
-
- if (!norecursion && options.defaultDate) {
- date = _this.strToDateTime(options.defaultDate);
- d.setFullYear(date.getFullYear());
- d.setMonth(date.getMonth());
- d.setDate(date.getDate());
- }
-
- if (options.yearOffset) {
- d.setFullYear(d.getFullYear() + options.yearOffset);
- }
-
- if (!norecursion && options.defaultTime) {
- time = _this.strtotime(options.defaultTime);
- d.setHours(time.getHours());
- d.setMinutes(time.getMinutes());
- }
- return d;
- };
-
- _this.isValidDate = function (d) {
- if (Object.prototype.toString.call(d) !== "[object Date]") {
- return false;
- }
- return !isNaN(d.getTime());
- };
-
- _this.setCurrentTime = function (dTime) {
- _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();
- datetimepicker.trigger('xchange.xdsoft');
- };
-
- _this.empty = function () {
- _this.currentTime = null;
- };
-
- _this.getCurrentTime = function (dTime) {
- return _this.currentTime;
- };
-
- _this.nextMonth = function () {
-
- if (_this.currentTime === undefined || _this.currentTime === null) {
- _this.currentTime = _this.now();
- }
-
- var month = _this.currentTime.getMonth() + 1,
- year;
- if (month === 12) {
- _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
- month = 0;
- }
-
- year = _this.currentTime.getFullYear();
-
- _this.currentTime.setDate(
- Math.min(
- new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
- _this.currentTime.getDate()
- )
- );
- _this.currentTime.setMonth(month);
-
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
- options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- datetimepicker.trigger('xchange.xdsoft');
- return month;
- };
-
- _this.prevMonth = function () {
-
- if (_this.currentTime === undefined || _this.currentTime === null) {
- _this.currentTime = _this.now();
- }
-
- var month = _this.currentTime.getMonth() - 1;
- if (month === -1) {
- _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
- month = 11;
- }
- _this.currentTime.setDate(
- Math.min(
- new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
- _this.currentTime.getDate()
- )
- );
- _this.currentTime.setMonth(month);
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- datetimepicker.trigger('xchange.xdsoft');
- return month;
- };
-
- _this.getWeekOfYear = function (datetime) {
- if (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {
- var week = options.onGetWeekOfYear.call(datetimepicker, datetime);
- if (typeof week !== 'undefined') {
- return week;
- }
- }
- var onejan = new Date(datetime.getFullYear(), 0, 1);
- //First week of the year is th one with the first Thursday according to ISO8601
- if(onejan.getDay()!=4)
- onejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));
- return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
- };
-
- _this.strToDateTime = function (sDateTime) {
- var tmpDate = [], timeOffset, currentTime;
-
- if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
- return sDateTime;
- }
-
- tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime);
- if (tmpDate) {
- tmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);
- }
- if (tmpDate && tmpDate[2]) {
- timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
- currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
- } else {
- currentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();
- }
-
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now();
- }
-
- return currentTime;
- };
-
- _this.strToDate = function (sDate) {
- if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
- return sDate;
- }
-
- var currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now(true);
- }
- return currentTime;
- };
-
- _this.strtotime = function (sTime) {
- if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
- return sTime;
- }
- var currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now(true);
- }
- return currentTime;
- };
-
- _this.str = function () {
- return dateHelper.formatDate(_this.currentTime, options.format);
- };
- _this.currentTime = this.now();
- };
-
- _xdsoft_datetime = new XDSoft_datetime();
-
- applyButton.on('touchend click', function (e) {//pathbrite
- e.preventDefault();
- datetimepicker.data('changed', true);
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
- input.val(_xdsoft_datetime.str());
- datetimepicker.trigger('close.xdsoft');
- });
- mounth_picker
- .find('.xdsoft_today_button')
- .on('touchend mousedown.xdsoft', function () {
- datetimepicker.data('changed', true);
- _xdsoft_datetime.setCurrentTime(0);
- datetimepicker.trigger('afterOpen.xdsoft');
- }).on('dblclick.xdsoft', function () {
- var currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;
- currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
- minDate = _xdsoft_datetime.strToDate(options.minDate);
- minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
- if (currentDate < minDate) {
- return;
- }
- maxDate = _xdsoft_datetime.strToDate(options.maxDate);
- maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
- if (currentDate > maxDate) {
- return;
- }
- input.val(_xdsoft_datetime.str());
- input.trigger('change');
- datetimepicker.trigger('close.xdsoft');
- });
- mounth_picker
- .find('.xdsoft_prev,.xdsoft_next')
- .on('touchend mousedown.xdsoft', function () {
- var $this = $(this),
- timer = 0,
- stop = false;
-
- (function arguments_callee1(v) {
- if ($this.hasClass(options.next)) {
- _xdsoft_datetime.nextMonth();
- } else if ($this.hasClass(options.prev)) {
- _xdsoft_datetime.prevMonth();
- }
- if (options.monthChangeSpinner) {
- if (!stop) {
- timer = setTimeout(arguments_callee1, v || 100);
- }
- }
- }(500));
-
- $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee2() {
- clearTimeout(timer);
- stop = true;
- $([document.body, window]).off('touchend mouseup.xdsoft', arguments_callee2);
- });
- });
-
- timepicker
- .find('.xdsoft_prev,.xdsoft_next')
- .on('touchend mousedown.xdsoft', function () {
- var $this = $(this),
- timer = 0,
- stop = false,
- period = 110;
- (function arguments_callee4(v) {
- var pheight = timeboxparent[0].clientHeight,
- height = timebox[0].offsetHeight,
- top = Math.abs(parseInt(timebox.css('marginTop'), 10));
- if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {
- timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
- } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
- timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);
- period = (period > 10) ? 10 : period - 10;
- if (!stop) {
- timer = setTimeout(arguments_callee4, v || period);
- }
- }(500));
- $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee5() {
- clearTimeout(timer);
- stop = true;
- $([document.body, window])
- .off('touchend mouseup.xdsoft', arguments_callee5);
- });
- });
-
- xchangeTimer = 0;
- // base handler - generating a calendar and timepicker
- datetimepicker
- .on('xchange.xdsoft', function (event) {
- clearTimeout(xchangeTimer);
- xchangeTimer = setTimeout(function () {
-
- if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- }
-
- var table = '',
- start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
- i = 0,
- j,
- today = _xdsoft_datetime.now(),
- maxDate = false,
- minDate = false,
- hDate,
- day,
- d,
- y,
- m,
- w,
- classes = [],
- customDateSettings,
- newRow = true,
- time = '',
- h = '',
- line_time,
- description;
-
- while (start.getDay() !== options.dayOfWeekStart) {
- start.setDate(start.getDate() - 1);
- }
-
- table += '<table><thead><tr>';
-
- if (options.weeks) {
- table += '<th></th>';
- }
-
- for (j = 0; j < 7; j += 1) {
- table += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
- }
-
- table += '</tr></thead>';
- table += '<tbody>';
-
- if (options.maxDate !== false) {
- maxDate = _xdsoft_datetime.strToDate(options.maxDate);
- maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
- }
-
- if (options.minDate !== false) {
- minDate = _xdsoft_datetime.strToDate(options.minDate);
- minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
- }
-
- while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
- classes = [];
- i += 1;
-
- day = start.getDay();
- d = start.getDate();
- y = start.getFullYear();
- m = start.getMonth();
- w = _xdsoft_datetime.getWeekOfYear(start);
- description = '';
-
- classes.push('xdsoft_date');
-
- if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
- customDateSettings = options.beforeShowDay.call(datetimepicker, start);
- } else {
- customDateSettings = null;
- }
-
- if(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === "[object RegExp]"){
- if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
- classes.push('xdsoft_disabled');
- }
- } else if(options.allowDates && options.allowDates.length>0){
- if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){
- classes.push('xdsoft_disabled');
- }
- } else if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
- classes.push('xdsoft_disabled');
- } else if (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
- classes.push('xdsoft_disabled');
- } else if (options.disabledWeekDays.indexOf(day) !== -1) {
- classes.push('xdsoft_disabled');
- }
-
- if (customDateSettings && customDateSettings[1] !== "") {
- classes.push(customDateSettings[1]);
- }
-
- if (_xdsoft_datetime.currentTime.getMonth() !== m) {
- classes.push('xdsoft_other_month');
- }
-
- if ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
- classes.push('xdsoft_current');
- }
-
- if (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
- classes.push('xdsoft_today');
- }
-
- if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
- classes.push('xdsoft_weekend');
- }
-
- if (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {
- hDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];
- classes.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);
- description = hDate.desc === undefined ? '' : hDate.desc;
- }
-
- if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
- classes.push(options.beforeShowDay(start));
- }
-
- if (newRow) {
- table += '<tr>';
- newRow = false;
- if (options.weeks) {
- table += '<th>' + w + '</th>';
- }
- }
-
- table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
- '<div>' + d + '</div>' +
- '</td>';
-
- if (start.getDay() === options.dayOfWeekStartPrev) {
- table += '</tr>';
- newRow = true;
- }
-
- start.setDate(d + 1);
- }
- table += '</tbody></table>';
-
- calendar.html(table);
-
- mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
- mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
-
- // generate timebox
- time = '';
- h = '';
- m = '';
-
- line_time = function line_time(h, m) {
- var now = _xdsoft_datetime.now(), optionDateTime, current_time,
- isALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;
- now.setHours(h);
- h = parseInt(now.getHours(), 10);
- now.setMinutes(m);
- m = parseInt(now.getMinutes(), 10);
- optionDateTime = new Date(_xdsoft_datetime.currentTime);
- optionDateTime.setHours(h);
- optionDateTime.setMinutes(m);
- classes = [];
- if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
- classes.push('xdsoft_disabled');
- }
- if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
- classes.push('xdsoft_disabled');
- }
-
- current_time = new Date(_xdsoft_datetime.currentTime);
- current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
-
- if (!isALlowTimesInit) {
- current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
- }
-
- if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {
- if (options.defaultSelect || datetimepicker.data('changed')) {
- classes.push('xdsoft_current');
- } else if (options.initTime) {
- classes.push('xdsoft_init_time');
- }
- }
- if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {
- classes.push('xdsoft_today');
- }
- time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + dateHelper.formatDate(now, options.formatTime) + '</div>';
- };
-
- if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
- for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {
- for (j = 0; j < 60; j += options.step) {
- h = (i < 10 ? '0' : '') + i;
- m = (j < 10 ? '0' : '') + j;
- line_time(h, m);
- }
- }
- } else {
- for (i = 0; i < options.allowTimes.length; i += 1) {
- h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
- m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
- line_time(h, m);
- }
- }
-
- timebox.html(time);
-
- opt = '';
- i = 0;
-
- for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {
- opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>';
- }
- yearselect.children().eq(0)
- .html(opt);
-
- for (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {
- opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
- }
- monthselect.children().eq(0).html(opt);
- $(datetimepicker)
- .trigger('generate.xdsoft');
- }, 10);
- event.stopPropagation();
- })
- .on('afterOpen.xdsoft', function () {
- if (options.timepicker) {
- var classType, pheight, height, top;
- if (timebox.find('.xdsoft_current').length) {
- classType = '.xdsoft_current';
- } else if (timebox.find('.xdsoft_init_time').length) {
- classType = '.xdsoft_init_time';
- }
- if (classType) {
- pheight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
- if ((height - pheight) < top) {
- top = height - pheight;
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
- } else {
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
- }
- }
- });
-
- timerclick = 0;
- calendar
- .on('touchend click.xdsoft', 'td', function (xdevent) {
- xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
- timerclick += 1;
- var $this = $(this),
- currentTime = _xdsoft_datetime.currentTime;
-
- if (currentTime === undefined || currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- currentTime = _xdsoft_datetime.currentTime;
- }
-
- if ($this.hasClass('xdsoft_disabled')) {
- return false;
- }
-
- currentTime.setDate(1);
- currentTime.setFullYear($this.data('year'));
- currentTime.setMonth($this.data('month'));
- currentTime.setDate($this.data('date'));
-
- datetimepicker.trigger('select.xdsoft', [currentTime]);
-
- input.val(_xdsoft_datetime.str());
-
- if (options.onSelectDate && $.isFunction(options.onSelectDate)) {
- options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
- }
-
- datetimepicker.data('changed', true);
- datetimepicker.trigger('xchange.xdsoft');
- datetimepicker.trigger('changedatetime.xdsoft');
- if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {
- datetimepicker.trigger('close.xdsoft');
- }
- setTimeout(function () {
- timerclick = 0;
- }, 200);
- });
-
- timebox
- .on('touchend click.xdsoft', 'div', function (xdevent) {
- xdevent.stopPropagation();
- var $this = $(this),
- currentTime = _xdsoft_datetime.currentTime;
-
- if (currentTime === undefined || currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- currentTime = _xdsoft_datetime.currentTime;
- }
-
- if ($this.hasClass('xdsoft_disabled')) {
- return false;
- }
- currentTime.setHours($this.data('hour'));
- currentTime.setMinutes($this.data('minute'));
- datetimepicker.trigger('select.xdsoft', [currentTime]);
-
- datetimepicker.data('input').val(_xdsoft_datetime.str());
-
- if (options.onSelectTime && $.isFunction(options.onSelectTime)) {
- options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
- }
- datetimepicker.data('changed', true);
- datetimepicker.trigger('xchange.xdsoft');
- datetimepicker.trigger('changedatetime.xdsoft');
- if (options.inline !== true && options.closeOnTimeSelect === true) {
- datetimepicker.trigger('close.xdsoft');
- }
- });
-
-
- datepicker
- .on('mousewheel.xdsoft', function (event) {
- if (!options.scrollMonth) {
- return true;
- }
- if (event.deltaY < 0) {
- _xdsoft_datetime.nextMonth();
- } else {
- _xdsoft_datetime.prevMonth();
- }
- return false;
- });
-
- input
- .on('mousewheel.xdsoft', function (event) {
- if (!options.scrollInput) {
- return true;
- }
- if (!options.datepicker && options.timepicker) {
- current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;
- if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {
- current_time_index += event.deltaY;
- }
- if (timebox.children().eq(current_time_index).length) {
- timebox.children().eq(current_time_index).trigger('mousedown');
- }
- return false;
- }
- if (options.datepicker && !options.timepicker) {
- datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
- if (input.val) {
- input.val(_xdsoft_datetime.str());
- }
- datetimepicker.trigger('changedatetime.xdsoft');
- return false;
- }
- });
-
- datetimepicker
- .on('changedatetime.xdsoft', function (event) {
- if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
- var $input = datetimepicker.data('input');
- options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
- delete options.value;
- $input.trigger('change');
- }
- })
- .on('generate.xdsoft', function () {
- if (options.onGenerate && $.isFunction(options.onGenerate)) {
- options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- if (triggerAfterOpen) {
- datetimepicker.trigger('afterOpen.xdsoft');
- triggerAfterOpen = false;
- }
- })
- .on('click.xdsoft', function (xdevent) {
- xdevent.stopPropagation();
- });
-
- current_time_index = 0;
-
- setPos = function () {
- /**
- * 修复输入框在window最右边,且输入框的宽度小于日期控件宽度情况下,日期控件显示不全的bug。
- * Bug fixed - The datetimepicker will overflow-y when the width of the date input less than its, which
- * could causes part of the datetimepicker being hidden.
- * by Soon start
- */
- var offset = datetimepicker.data('input').offset(),
- datetimepickerelement = datetimepicker.data('input')[0],
- top = offset.top + datetimepickerelement.offsetHeight - 1,
- left = offset.left,
- position = "absolute",
- node;
-
- if ((document.documentElement.clientWidth - offset.left) < datepicker.parent().outerWidth(true)) {
- var diff = datepicker.parent().outerWidth(true) - datetimepickerelement.offsetWidth;
- left = left - diff;
- }
- /**
- * by Soon end
- */
- if (datetimepicker.data('input').parent().css('direction') == 'rtl')
- left -= (datetimepicker.outerWidth() - datetimepicker.data('input').outerWidth());
- if (options.fixed) {
- top -= $(window).scrollTop();
- left -= $(window).scrollLeft();
- position = "fixed";
- } else {
- if (top + datetimepickerelement.offsetHeight > $(window).height() + $(window).scrollTop()) {
- top = offset.top - datetimepickerelement.offsetHeight + 1;
- }
- if (top < 0) {
- top = 0;
- }
- if (left + datetimepickerelement.offsetWidth > $(window).width()) {
- left = $(window).width() - datetimepickerelement.offsetWidth;
- }
- }
-
- node = datetimepicker[0];
- do {
- node = node.parentNode;
- if (window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) {
- left = left - (($(window).width() - node.offsetWidth) / 2);
- break;
- }
- } while (node.nodeName !== 'HTML');
- datetimepicker.css({
- left: left,
- top: top,
- position: position
- });
- };
- datetimepicker
- .on('open.xdsoft', function (event) {
- var onShow = true;
- if (options.onShow && $.isFunction(options.onShow)) {
- onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
- }
- if (onShow !== false) {
- datetimepicker.show();
- setPos();
- $(window)
- .off('resize.xdsoft', setPos)
- .on('resize.xdsoft', setPos);
-
- if (options.closeOnWithoutClick) {
- $([document.body, window]).on('touchstart mousedown.xdsoft', function arguments_callee6() {
- datetimepicker.trigger('close.xdsoft');
- $([document.body, window]).off('touchstart mousedown.xdsoft', arguments_callee6);
- });
- }
- }
- })
- .on('close.xdsoft', function (event) {
- var onClose = true;
- mounth_picker
- .find('.xdsoft_month,.xdsoft_year')
- .find('.xdsoft_select')
- .hide();
- if (options.onClose && $.isFunction(options.onClose)) {
- onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
- }
- if (onClose !== false && !options.opened && !options.inline) {
- datetimepicker.hide();
- }
- event.stopPropagation();
- })
- .on('toggle.xdsoft', function (event) {
- if (datetimepicker.is(':visible')) {
- datetimepicker.trigger('close.xdsoft');
- } else {
- datetimepicker.trigger('open.xdsoft');
- }
- })
- .data('input', input);
-
- timer = 0;
- timer1 = 0;
-
- datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
- datetimepicker.setOptions(options);
-
- function getCurrentValue() {
- var ct = false, time;
-
- if (options.startDate) {
- ct = _xdsoft_datetime.strToDate(options.startDate);
- } else {
- ct = options.value || ((input && input.val && input.val()) ? input.val() : '');
- if (ct) {
- ct = _xdsoft_datetime.strToDateTime(ct);
- } else if (options.defaultDate) {
- ct = _xdsoft_datetime.strToDateTime(options.defaultDate);
- if (options.defaultTime) {
- time = _xdsoft_datetime.strtotime(options.defaultTime);
- ct.setHours(time.getHours());
- ct.setMinutes(time.getMinutes());
- }
- }
- }
-
- if (ct && _xdsoft_datetime.isValidDate(ct)) {
- datetimepicker.data('changed', true);
- } else {
- ct = '';
- }
-
- return ct || 0;
- }
-
- function setMask(options) {
-
- var isValidValue = function (mask, value) {
- var reg = mask
- .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
- .replace(/_/g, '{digit+}')
- .replace(/([0-9]{1})/g, '{digit$1}')
- .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
- .replace(/\{digit[\+]\}/g, '[0-9_]{1}');
- return (new RegExp(reg)).test(value);
- },
- getCaretPos = function (input) {
- try {
- if (document.selection && document.selection.createRange) {
- var range = document.selection.createRange();
- return range.getBookmark().charCodeAt(2) - 2;
- }
- if (input.setSelectionRange) {
- return input.selectionStart;
- }
- } catch (e) {
- return 0;
- }
- },
- setCaretPos = function (node, pos) {
- node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
- if (!node) {
- return false;
- }
- if (node.createTextRange) {
- var textRange = node.createTextRange();
- textRange.collapse(true);
- textRange.moveEnd('character', pos);
- textRange.moveStart('character', pos);
- textRange.select();
- return true;
- }
- if (node.setSelectionRange) {
- node.setSelectionRange(pos, pos);
- return true;
- }
- return false;
- };
- if(options.mask) {
- input.off('keydown.xdsoft');
- }
- if (options.mask === true) {
- if (typeof moment != 'undefined') {
- options.mask = options.format
- .replace(/Y{4}/g, '9999')
- .replace(/Y{2}/g, '99')
- .replace(/M{2}/g, '19')
- .replace(/D{2}/g, '39')
- .replace(/H{2}/g, '29')
- .replace(/m{2}/g, '59')
- .replace(/s{2}/g, '59');
- } else {
- options.mask = options.format
- .replace(/Y/g, '9999')
- .replace(/F/g, '9999')
- .replace(/m/g, '19')
- .replace(/d/g, '39')
- .replace(/H/g, '29')
- .replace(/i/g, '59')
- .replace(/s/g, '59');
- }
- }
-
- if ($.type(options.mask) === 'string') {
- if (!isValidValue(options.mask, input.val())) {
- input.val(options.mask.replace(/[0-9]/g, '_'));
- setCaretPos(input[0], 0);
- }
-
- input.on('keydown.xdsoft', function (event) {
- var val = this.value,
- key = event.which,
- pos,
- digit;
-
- if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
- pos = getCaretPos(this);
- digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
-
- if ((key === BACKSPACE || key === DEL) && pos) {
- pos -= 1;
- digit = '_';
- }
-
- while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
- pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
- }
-
- val = val.substr(0, pos) + digit + val.substr(pos + 1);
- if ($.trim(val) === '') {
- val = options.mask.replace(/[0-9]/g, '_');
- } else {
- if (pos === options.mask.length) {
- event.preventDefault();
- return false;
- }
- }
-
- pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
- while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
- pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
- }
-
- if (isValidValue(options.mask, val)) {
- this.value = val;
- setCaretPos(this, pos);
- } else if ($.trim(val) === '') {
- this.value = options.mask.replace(/[0-9]/g, '_');
- } else {
- input.trigger('error_input.xdsoft');
- }
- } else {
- if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
- return true;
- }
- }
-
- event.preventDefault();
- return false;
- });
- }
- }
-
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
-
- input
- .data('xdsoft_datetimepicker', datetimepicker)
- .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (event) {
- if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
- return;
- }
- clearTimeout(timer);
- timer = setTimeout(function () {
- if (input.is(':disabled')) {
- return;
- }
-
- triggerAfterOpen = true;
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
- if(options.mask) {
- setMask(options);
- }
- datetimepicker.trigger('open.xdsoft');
- }, 100);
- })
- .on('keydown.xdsoft', function (event) {
- var val = this.value, elementSelector,
- key = event.which;
- if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
- elementSelector = $("input:visible,textarea:visible,button:visible,a:visible");
- datetimepicker.trigger('close.xdsoft');
- elementSelector.eq(elementSelector.index(this) + 1).focus();
- return false;
- }
- if ([TAB].indexOf(key) !== -1) {
- datetimepicker.trigger('close.xdsoft');
- return true;
- }
- })
- .on('blur.xdsoft', function () {
- datetimepicker.trigger('close.xdsoft');
- });
- };
- destroyDateTimePicker = function (input) {
- var datetimepicker = input.data('xdsoft_datetimepicker');
- if (datetimepicker) {
- datetimepicker.data('xdsoft_datetime', null);
- datetimepicker.remove();
- input
- .data('xdsoft_datetimepicker', null)
- .off('.xdsoft');
- $(window).off('resize.xdsoft');
- $([window, document.body]).off('mousedown.xdsoft touchstart');
- if (input.unmousewheel) {
- input.unmousewheel();
- }
- }
- };
- $(document)
- .off('keydown.xdsoftctrl keyup.xdsoftctrl')
- .on('keydown.xdsoftctrl', function (e) {
- if (e.keyCode === CTRLKEY) {
- ctrlDown = true;
- }
- })
- .on('keyup.xdsoftctrl', function (e) {
- if (e.keyCode === CTRLKEY) {
- ctrlDown = false;
- }
- });
-
- this.each(function () {
- var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
- if (datetimepicker) {
- if ($.type(opt) === 'string') {
- switch (opt) {
- case 'show':
- $(this).select().focus();
- datetimepicker.trigger('open.xdsoft');
- break;
- case 'hide':
- datetimepicker.trigger('close.xdsoft');
- break;
- case 'toggle':
- datetimepicker.trigger('toggle.xdsoft');
- break;
- case 'destroy':
- destroyDateTimePicker($(this));
- break;
- case 'reset':
- this.value = this.defaultValue;
- if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {
- datetimepicker.data('changed', false);
- }
- datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
- break;
- case 'validate':
- $input = datetimepicker.data('input');
- $input.trigger('blur.xdsoft');
- break;
- default:
- if (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {
- result = datetimepicker[opt](opt2);
- }
- }
- } else {
- datetimepicker
- .setOptions(opt);
- }
- return 0;
- }
- if ($.type(opt) !== 'string') {
- if (!options.lazyInit || options.open || options.inline) {
- createDateTimePicker($(this));
- } else {
- lazyInit($(this));
- }
- }
- });
-
- return result;
- };
- $.fn.datetimepicker.defaults = default_options;
-
- function HighlightedDate(date, desc, style) {
- "use strict";
- this.date = date;
- this.desc = desc;
- this.style = style;
- }
-
-}));
-/*!
- * jQuery Mousewheel 3.1.13
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- */
-
-(function (factory) {
- if ( typeof define === 'function' && define.amd ) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS style for Browserify
- module.exports = factory;
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function ($) {
-
- var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
- toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
- ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
- slice = Array.prototype.slice,
- nullLowestDeltaTimeout, lowestDelta;
-
- if ( $.event.fixHooks ) {
- for ( var i = toFix.length; i; ) {
- $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
- }
- }
-
- var special = $.event.special.mousewheel = {
- version: '3.1.12',
-
- setup: function() {
- if ( this.addEventListener ) {
- for ( var i = toBind.length; i; ) {
- this.addEventListener( toBind[--i], handler, false );
- }
- } else {
- this.onmousewheel = handler;
- }
- // Store the line height and page height for this particular element
- $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
- $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
- },
-
- teardown: function() {
- if ( this.removeEventListener ) {
- for ( var i = toBind.length; i; ) {
- this.removeEventListener( toBind[--i], handler, false );
- }
- } else {
- this.onmousewheel = null;
- }
- // Clean up the data we added to the element
- $.removeData(this, 'mousewheel-line-height');
- $.removeData(this, 'mousewheel-page-height');
- },
-
- getLineHeight: function(elem) {
- var $elem = $(elem),
- $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
- if (!$parent.length) {
- $parent = $('body');
- }
- return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
- },
-
- getPageHeight: function(elem) {
- return $(elem).height();
- },
-
- settings: {
- adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
- normalizeOffset: true // calls getBoundingClientRect for each event
- }
- };
-
- $.fn.extend({
- mousewheel: function(fn) {
- return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
- },
-
- unmousewheel: function(fn) {
- return this.unbind('mousewheel', fn);
- }
- });
-
-
- function handler(event) {
- var orgEvent = event || window.event,
- args = slice.call(arguments, 1),
- delta = 0,
- deltaX = 0,
- deltaY = 0,
- absDelta = 0,
- offsetX = 0,
- offsetY = 0;
- event = $.event.fix(orgEvent);
- event.type = 'mousewheel';
-
- // Old school scrollwheel delta
- if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
- if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
- if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
- if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
-
- // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
- if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
- deltaX = deltaY * -1;
- deltaY = 0;
- }
-
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
- delta = deltaY === 0 ? deltaX : deltaY;
-
- // New school wheel delta (wheel event)
- if ( 'deltaY' in orgEvent ) {
- deltaY = orgEvent.deltaY * -1;
- delta = deltaY;
- }
- if ( 'deltaX' in orgEvent ) {
- deltaX = orgEvent.deltaX;
- if ( deltaY === 0 ) { delta = deltaX * -1; }
- }
-
- // No change actually happened, no reason to go any further
- if ( deltaY === 0 && deltaX === 0 ) { return; }
-
- // Need to convert lines and pages to pixels if we aren't already in pixels
- // There are three delta modes:
- // * deltaMode 0 is by pixels, nothing to do
- // * deltaMode 1 is by lines
- // * deltaMode 2 is by pages
- if ( orgEvent.deltaMode === 1 ) {
- var lineHeight = $.data(this, 'mousewheel-line-height');
- delta *= lineHeight;
- deltaY *= lineHeight;
- deltaX *= lineHeight;
- } else if ( orgEvent.deltaMode === 2 ) {
- var pageHeight = $.data(this, 'mousewheel-page-height');
- delta *= pageHeight;
- deltaY *= pageHeight;
- deltaX *= pageHeight;
- }
-
- // Store lowest absolute delta to normalize the delta values
- absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
-
- if ( !lowestDelta || absDelta < lowestDelta ) {
- lowestDelta = absDelta;
-
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- lowestDelta /= 40;
- }
- }
-
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- // Divide all the things by 40!
- delta /= 40;
- deltaX /= 40;
- deltaY /= 40;
- }
-
- // Get a whole, normalized value for the deltas
- delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
- deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
- deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
-
- // Normalise offsetX and offsetY properties
- if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
- var boundingRect = this.getBoundingClientRect();
- offsetX = event.clientX - boundingRect.left;
- offsetY = event.clientY - boundingRect.top;
- }
-
- // Add information to the event object
- event.deltaX = deltaX;
- event.deltaY = deltaY;
- event.deltaFactor = lowestDelta;
- event.offsetX = offsetX;
- event.offsetY = offsetY;
- // Go ahead and set deltaMode to 0 since we converted to pixels
- // Although this is a little odd since we overwrite the deltaX/Y
- // properties with normalized deltas.
- event.deltaMode = 0;
-
- // Add event and delta to the front of the arguments
- args.unshift(event, delta, deltaX, deltaY);
-
- // Clearout lowestDelta after sometime to better
- // handle multiple device types that give different
- // a different lowestDelta
- // Ex: trackpad = 3 and mouse wheel = 120
- if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
- nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
-
- return ($.event.dispatch || $.event.handle).apply(this, args);
- }
-
- function nullLowestDelta() {
- lowestDelta = null;
- }
-
- function shouldAdjustOldDeltas(orgEvent, absDelta) {
- // If this is an older event and the delta is divisable by 120,
- // then we are assuming that the browser is treating this as an
- // older mouse wheel event and that we should divide the deltas
- // by 40 to try and get a more usable deltaFactor.
- // Side note, this actually impacts the reported scroll distance
- // in older browsers and can cause scrolling to be slower than native.
- // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
- return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
- }
-
-}));
-
-$(document).ready(function(){
- $.datetimepicker.setLocale('en');
-});
diff --git a/web/nms-public.gathering.org/js/jquery.min.js b/web/nms-public.gathering.org/js/jquery.min.js
deleted file mode 100644
index e6a051d..0000000
--- a/web/nms-public.gathering.org/js/jquery.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
-}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/web/nms-public.gathering.org/js/nms-color-util.js b/web/nms-public.gathering.org/js/nms-color-util.js
deleted file mode 100644
index 6b5a4b5..0000000
--- a/web/nms-public.gathering.org/js/nms-color-util.js
+++ /dev/null
@@ -1,93 +0,0 @@
-
-/*
- * Some stolen colors that look OK.
- *
- * PS: Stolen from boostrap, because we use bootstrap and these look good
- * and match.
- */
-var lightblue = "#d9edf7";
-var lightgreen = "#dff0d8";
-var lightred = "#f2dede";
-var lightorange = "#fcf8e3";
-var blue = "#337ab7";
-var green = "#5cb85c";
-var teal = "#5bc0de"; // Or whatever the hell that is
-var orange = "#f0ad4e";
-var red = "#d9534f";
-var white = "#ffffff";
-
-function gradient_from_latency(latency_ms, latency_secondary_ms)
-{
- if (latency_ms == undefined)
- return blue;
- return getColorStop(parseInt(latency_ms) * 10);
-}
-
-/*
- * Return a random-ish color (for testing)
- */
-function getRandomColor()
-{
- var colors = [ "white", red, teal, orange, green, blue ];
- var i = Math.round(Math.random() * (colors.length-1));
- return colors[i];
-}
-
-/*
- * Set up the hidden gradient canvas, using an array as input.
- *
- * This gives us a flexible way to get gradients between any number of
- * colors (green to red, or blue to green to orange to red to white to pink
- * to black and so on).
- *
- * Typically called when setting up a map handler. Currently "single
- * tenant", since there's just one canvas.
- *
- * XXX: We have to store the gradients in nms.* and restore this when we
- * resize for the moment, because this canvas is also re-sized (which isn't
- * really necessary, but avoids special handling).
- */
-function drawGradient(gradients)
-{
- var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
- var gradient = ctx.createLinearGradient(0,0,1000,0);
- var stops = gradients.length - 1;
- nms.gradients = gradients;
- for (var color in gradients) {
- var i = color / stops;
- gradient.addColorStop(i, gradients[color]);
- }
- ctx.beginPath();
- ctx.strokeStyle = gradient;
- ctx.moveTo(0,0);
- ctx.lineTo(1000,0);
- ctx.lineWidth = 10;
- ctx.closePath();
- ctx.stroke();
- ctx.moveTo(0,0);
-}
-
-/*
- * Get the color of a gradient, range is from 0 to 999 (inclusive).
- */
-function getColorStop(x) {
- x = parseInt(x);
- if (x > 999)
- x = 999;
- if (x < 0)
- x = 0;
- return getColor(x,0);
-}
-
-/*
- * Get the color on the hidden canvas at a specific point. Could easily be
- * made generic.
- */
-function getColor(x,y) {
- var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
- var imageData = ctx.getImageData(x, y, 1, 1);
- var data = imageData.data;
- if (data.length < 4)
- return false;
- return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')';
-}
diff --git a/web/nms-public.gathering.org/js/nms-data.js b/web/nms-public.gathering.org/js/nms-data.js
deleted file mode 100644
index 14e5fed..0000000
--- a/web/nms-public.gathering.org/js/nms-data.js
+++ /dev/null
@@ -1,259 +0,0 @@
-"use strict";
-
-/*
- * This file/module/whatever is an attempt to gather all data collection in
- * one place.
- *
- * The basic idea is to have all periodic data updates unified here, with
- * stats, tracking of "ajax overflows" and general-purpose error handling
- * and callbacks and whatnot, instead of all the custom stuff that we
- * started out with.
- *
- * Sources are identified by a name, which is then available in
- * nmsData[name] in full. A copy of the previous data set is kept in
- * nmsData.old[name]. You can use getNow / setNow() to append a 'now='
- * string.
- *
- * nmsData[name] - actual data
- * nmsData.old[name] - previous copy of data
- * nmsData.registerSource() - add a source, will be polled periodicall
- * nmsData.addHandler()
- * nmsData.updateSource() - issue a one-off update, outside of whatever
- * periodic polling might take place
- * nmsData.invalidate() - Invalidate browser-cache.
- */
-
-
-var nmsData = nmsData || {
- old: {}, // Single copy of previous data. Automatically populated.
- stats: {
- identicalFetches:0,
- outstandingAjaxRequests:0,
- ajaxOverflow:0,
- pollClearsEmpty:0,
- pollClears:0,
- pollSets:0,
- newSource:0,
- oldSource:0
- },
- /*
- * The last time stamp of any data received, regardless of source.
- *
- * Used as a fallback for blank now, but can also be used to check
- * "freshness", I suppose.
- */
- _last: undefined,
- _now: undefined,
-
- /*
- * These are provided so we can introduce error checking when we
- * have time.
- *
- * now() represents the data, not the intent. That means that if
- * you want to check if we are traveling in time you should not
- * check nmsData.now. That will always return a value as long as
- * we've had a single piece of data.
- */
- get now() { return this._now || this._last; },
- set now(val) {
- if (val == undefined || !val) {
- nmsData._now = undefined;
- } else {
- // FIXME: Check if now is valid syntax.
- nmsData._now = val;
- }
- },
- /*
- * List of sources, name, handler, etc
- */
- _sources: {},
-
- /*
- * Maximum number of AJAX requests in transit before we start
- * skipping updates.
- *
- * A problem right now is that it will typically always hit the
- * same thing since everything starts at the same time...
- */
- _ajaxThreshold: 10
-};
-
-
-nmsData._dropData = function (name) {
- delete this[name];
- delete this.old[name];
-};
-
-nmsData.removeSource = function (name) {
- if (this._sources[name] == undefined) {
- this.stats.pollClearsEmpty++;
- return true;
- }
- if (this._sources[name]['handle']) {
- this.stats.pollClears++;
- clearInterval(this._sources[name]['handle']);
- }
- delete this._sources[name];
-};
-
-/*
- * Register a source.
- *
- * name: "Local" name. Maps to nmsData[name]
- * target: URL of the source
- *
- * This can be called multiple times to add multiple handlers. There's no
- * guarantee that they will be run in order, but right now they do.
- *
- * Update frequency _might_ be adaptive eventually, but since we only
- * execute callbacks on change and backend sends cache headers, the browser
- * will not issue actual HTTP requests.
- *
- * FIXME: Should be unified with nmsTimers() somehow.
- */
-nmsData.registerSource = function(name, target) {
- if (this._sources[name] == undefined) {
- this._sources[name] = { target: target, cbs: {}, fresh: true };
- this._sources[name]['handle'] = setInterval(function(){nmsData.updateSource(name)}, 1000);
- this.stats.newSource++;
- } else {
- this.stats.oldSource++;
- }
-
- this.stats.pollSets++;
-};
-
-/*
- * Add a handler (callback) for a source, using an id.
- *
- * This is idempotent: if the id is the same, it will just overwrite the
- * old id, not add a copy.
- */
-nmsData.addHandler = function(name, id, cb, cbdata) {
- var cbob = {
- id: id,
- name: name,
- cb: cb,
- fresh: true,
- cbdata: cbdata
- };
- if (id == undefined) {
- return;
- }
- this._sources[name].cbs[id] = cbob;
- this.updateSource(name);
-};
-
-/*
- * Unregister all handlers with the "id" for all sources.
- *
- * Mainly used to avoid fini() functions in the map handlers. E.g.: just
- * reuse "mapHandler" as id.
- */
-nmsData.unregisterHandlerWildcard = function(id) {
- for (var v in nmsData._sources) {
- this.unregisterHandler(v, id);
- }
-};
-
-nmsData.unregisterHandler = function(name, id) {
- delete this._sources[name].cbs[id];
-};
-
-/*
- * Updates a source.
- *
- * Called on interval, but can also be used to update a source after a
- * known action that updates the underlying data (e.g: update comments
- * after a comment is posted).
- */
-nmsData.updateSource = function(name) {
- /*
- * See comment in nms.js nmsINIT();
- */
- if (name == "ticker" ) {
- for (var i in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[i];
- if (tmp.cb != undefined) {
- tmp.cb(tmp.cbdata);
- }
- }
- return;
- }
- this._genericUpdater(name, true);
-};
-
-nmsData.invalidate = function(name) {
- this._genericUpdater(name, false);
-};
-/*
- * Reset a source, deleting all data, including old.
- *
- * Useful if traveling in time, for example.
- */
-nmsData.resetSource = function(name) {
- this[name] = {};
- this.old[name] = {};
- this.updateSource(name);
-};
-
-/*
- * Updates nmsData[name] and nmsData.old[name], issuing any callbacks where
- * relevant.
- *
- * Do not use this directly. Use updateSource().
- *
- */
-nmsData._genericUpdater = function(name, cacheok) {
- if (this.stats.outstandingAjaxRequests++ > this._ajaxThreshold) {
- this.stats.outstandingAjaxRequests--;
- this.stats.ajaxOverflow++;
- return;
- }
- var now = "";
- if (this._now != undefined)
- now = "now=" + this._now;
- if (now != "") {
- if (this._sources[name].target.match("\\?"))
- now = "&" + now;
- else
- now = "?" + now;
- }
- var heads = {};
- if (cacheok == false) {
- heads['Cache-Control'] = "max-age=0, no-cache, stale-while-revalidate=0";
- }
-
- $.ajax({
- type: "GET",
- headers: heads,
- url: this._sources[name].target + now,
- dataType: "json",
- success: function (data, textStatus, jqXHR) {
- if (nmsData[name] == undefined || nmsData[name]['hash'] != data['hash']) {
- nmsData._last = data['time'];
- nmsData.old[name] = nmsData[name];
- nmsData[name] = data;
- nmsMap.drawNow();
- for (var i in nmsData._sources[name].cbs) {
- var tmp2 = nmsData._sources[name].cbs[i];
- if (tmp2.cb != undefined) {
- tmp2.cb(tmp2.cbdata);
- }
- }
- } else {
- for (var j in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[j];
- if (tmp.cb != undefined && tmp.fresh) {
- nmsData._sources[name].cbs[j].fresh = false;
- tmp.cb(tmp.cbdata);
- }
- }
- nmsData.stats.identicalFetches++;
- }
- },
- complete: function(jqXHR, textStatus) {
- nmsData.stats.outstandingAjaxRequests--;
- }
- });
-};
diff --git a/web/nms-public.gathering.org/js/nms-info-box.js b/web/nms-public.gathering.org/js/nms-info-box.js
deleted file mode 100644
index a718f78..0000000
--- a/web/nms-public.gathering.org/js/nms-info-box.js
+++ /dev/null
@@ -1,713 +0,0 @@
-"use strict";
-
-/*
- * NMS info window controller
- *
- * Interface: nmsInfoBox.showWindow(windowType,optionalParameter), nmsInfoBox.hide(), nmsInfoBox.refresh()
- *
- * Any windowTypes should at a minimum implement load, update, unload, getTitle, getContent, getChildContent
- *
- */
-
-var nmsInfoBox = nmsInfoBox || {
- stats: {},
- _container: false, //Container window
- _window: false, //Active window (reference to _windowTypes object or false)
- _windowTypes: [] //List of all avaliable window types
-};
-
-/*
- * Shows a window from the _windowTypes list
- */
-nmsInfoBox.showWindow = function (windowName,argument) {
- if(windowName == "switchInfo" && argument != '' && argument == this._window.sw) {
- nmsInfoBox.hide();
- return;
- }
- nmsInfoBox.hide();
- for(var win in this._windowTypes) {
- if(windowName == win) {
- this._window = this._windowTypes[win];
- this._show(argument);
- return;
- }
- }
-};
-
-/*
- * Refresh the active window
- */
-nmsInfoBox.refresh = function(argument) {
- if(!nmsInfoBox._window)
- return;
- nmsInfoBox._show(argument);
-};
-nmsInfoBox.update = function(argument) {
- if(!nmsInfoBox._window)
- return;
- nmsInfoBox._window.update(argument);
-}
-
-/*
- * Internal function to show the active _window and pass along any arguments
- */
-nmsInfoBox._show = function(argument) {
- nmsData.addHandler("comments","switchshower",nmsInfoBox.update,'comments');
- nmsData.addHandler("switches","switchshower",nmsInfoBox.update,'switches');
- nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,'smanagement');
- nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,'snmp');
-
- if(argument != "soft")
- this._window.load(argument);
-
- this._container = document.getElementById("info-panel-container");
- var panel = document.createElement("div");
- panel.classList.add("panel", "panel-default");
- var title = document.createElement("div");
- title.classList.add("panel-heading");
- var body = document.createElement("div");
- body.classList.add("panel-body");
-
- title.innerHTML = this._window.getTitle() + '<button type="button" class="close" aria-label="Close" onclick="nmsInfoBox.hide();" style="float: right;"><span aria-hidden="true">&times;</span></button>';
- var content = this._window.getContent();
- if(!content.nodeName) {
- body.innerHTML = this._window.content;
- } else {
- body.appendChild(content);
- }
- var childContent = this._window.getChildContent();
- if(childContent != false) {
- body.appendChild(childContent);
- }
-
- panel.appendChild(title);
- panel.appendChild(body);
- while(this._container.firstChild) {
- this._container.removeChild(this._container.firstChild);
- }
- this._container.appendChild(panel);
- this._container.style.display = "block";
- $('[data-toggle="popover"]').popover({placement:"top",container:'body'});
-};
-
-/*
- * Hide the active window and tell it to unload
- */
-nmsInfoBox.hide = function() {
- if(!this._container || !this._window)
- return;
- this._container.style.display = "none";
- this._window.unload();
- this._window = false;
- nmsData.unregisterHandler("comments","switchshower");
- nmsData.unregisterHandler("switches","switchshower");
- nmsData.unregisterHandler("smanagement","switchshower");
- nmsData.unregisterHandler("snmp","switchshower");
-};
-
-/*
- * Window type: Add Switch
- *
- * Basic window that lets you create a new switch
- *
- */
-nmsInfoBox._windowTypes.addSwitch = {
- title: 'Add new switch',
- content: '<input type="text" class="form-control" id="create-sysname" placeholder="Sysname id"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.addSwitch.save();">Add switch</button>',
- childContent: false,
- getTitle: function() {
- return this.title;
- },
- getContent: function() {
- return this.content;
- },
- getChildContent: function() {
- return this.childContent;
- },
- load: function(argument) {
- },
- update: function(type) {
- },
- unload: function() {
- },
- save: function() {
- var sysname = document.getElementById('create-sysname').value;
- var myData = JSON.stringify([{'sysname':sysname}]);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-add",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- var result = JSON.parse(data);
- if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded
- nmsInfoBox.hide();
- }
- nmsData.invalidate("switches");
- nmsData.invalidate("smanagement");
- }
- });
- }
-};
-
-/*
- * Window type: Switch info
- *
- * Advanced window with information about a specific switch, and basic editing options
- *
- * Custom interfaces: showComments, showSNMP, showEdit, save
- *
- */
-nmsInfoBox._windowTypes.switchInfo = {
- title: '',
- content: '',
- childContent: false,
- sw: '',
- swi: '',
- swm: '',
- commentsHash: false,
- activeView: '',
- load: function(sw) {
- if(sw) {
- this.sw = sw;
- }
- this.swi = nmsData.switches["switches"][this.sw];
- try {
- this.swm = nmsData.smanagement.switches[this.sw];
- } catch(e) {
- this.swm = [];
- }
-
- var content = [];
-
- for (var v in this.swi) {
- if (v == "placement") {
- var place = JSON.stringify(this.swi[v]);
- content.push([v,place]);
- continue;
- }
- content.push([v, this.swi[v]]);
- }
-
- for (var v in this.swm) {
- content.push([v, this.swm[v]]);
- }
- content.sort();
-
- var infotable = nmsInfoBox._makeTable(content);
- infotable.id = "info-switch-table";
-
- this.content = infotable;
-
- },
- update: function(type) {
- switch (type) {
- case 'comments':
- if(this.activeView == "comments" && this.commentsHash != nmsData.comments.hash) {
- nmsInfoBox._windowTypes.switchInfo.showComments();
- }
- break;
- }
- },
- getTitle: function() {
- var sshButton = '';
- try {
- var mgmt = nmsInfoBox._window.swm.mgmt_v4_addr;
- sshButton = mgmt.split("/")[0];
- } catch(e) {
- console.log(e);
- }
- if(sshButton != null && sshButton != undefined && sshButton != '') {
- sshButton = ' <button type="button" class="ssh btn btn-xs btn-default"><a href="ssh://' + sshButton + '">SSH</a></button>';
- }
- return '<h4>' + this.sw + '</h4><button type="button" class="edit btn btn-xs btn-warning" onclick="nmsInfoBox._windowTypes.switchInfo.showEdit(\'' + this.sw + '\');">Edit</button> <button type="button" class="comments btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showComments(\'' + this.sw + '\');">Comments</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'ports\');">Ports</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'misc\');">Misc</button>' + sshButton;
- },
- getContent: function() {
- return this.content;
- },
- getChildContent: function() {
- return this.childContent;
- },
- showComments: function() {
- var oldView = this.activeView;
- this.activeView = "comments";
- var domObj = document.createElement("div");
- var comments = [];
-
- var commentbox = document.createElement("div");
- commentbox.id = "commentbox";
- commentbox.className = "panel-body";
- commentbox.style.width = "100%";
- commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>';
-
- // If we have no switch data, so just show comment form
- if(!nmsData.comments || !nmsData.comments.comments) {
- this.commentsHash = false;
-
- // We have data, refresh
- } else if(nmsData.comments.comments[this.sw]) {
- this.commentsHash = nmsData.comments.hash;
- for (var c in nmsData.comments.comments[this.sw]["comments"]) {
- var comment = nmsData.comments.comments[this.sw]["comments"][c];
- if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") {
- comments.push(comment);
- }
- }
-
- if (comments.length > 0) {
- var commenttable = nmsInfoBox._makeCommentTable(comments);
- commenttable.id = "info-switch-comments-table";
- domObj.appendChild(commenttable);
- }
-
- // We have no data for this switch, but its still correct
- } else {
- this.commentsHash = nmsData.comments.hash;
- }
-
- domObj.appendChild(commentbox);
- this.childContent = domObj;
- nmsInfoBox.refresh();
- },
- showEdit: function() {
- this.activeView = "edit";
- var domObj = document.createElement("div");
- var template = {};
-
- nmsInfoBox._editValues = {};
- var place;
- for (var v in this.swi) {
- if (v == "placement") {
- place = JSON.stringify(this.swi[v]);
- template[v] = place;
- continue;
- }
- template[v] = nmsInfoBox._nullBlank(this.swi[v]);
- }
- for (var v in this.swm) {
- template[v] = nmsInfoBox._nullBlank(this.swm[v]);
- }
- var content = [];
- for (v in template) {
- var tmpsw = '\'' + this.sw + '\'';
- var tmpv = '\'' + v + '\'';
- var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"';
- var html = "<input type=\"text\" class=\"form-control\" value='" + template[v] + "' id=\"edit-"+ this.sw + "-" + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '/>';
- content.push([v, html]);
- }
-
- content.sort();
-
- var table = nmsInfoBox._makeTable(content, "edit");
- domObj.appendChild(table);
-
- var submit = document.createElement("button");
- submit.innerHTML = "Save changes";
- submit.classList.add("btn", "btn-primary");
- submit.id = "edit-submit-" + this.sw;
- submit.onclick = function(e) { nmsInfoBox._windowTypes.switchInfo.save(); };
- domObj.appendChild(submit);
-
- var output = document.createElement("output");
- output.id = "edit-output";
- domObj.appendChild(output);
-
- if (place) {
- var pval = document.getElementById("edit-" + this.sw + "-placement");
- if (pval) {
- pval.value = place;
- }
- }
-
- this.childContent = domObj;
- nmsInfoBox.refresh();
- },
- showSNMP: function(tree) {
- this.activeView = "snmp";
- var domObj = document.createElement("div");
-
- var output = document.createElement("output");
- output.id = "edit-output";
- output.style = "white-space: pre;";
- try {
- output.value = JSON.stringify(nmsData.snmp.snmp[this.sw][tree],null,4);
- } catch(e) {
- output.value = "(no recent data (yet)?)";
- }
- domObj.appendChild(output);
-
- this.childContent = domObj;
- nmsInfoBox.refresh();
- },
- unload: function() {
- this.title = '';
- this.content = '';
- this.childContent = false;
- this.sw = '';
- this.swi = '';
- this.swm = '';
- this.commentsHash = false;
- this.activeView = '';
- },
- save: function() {
- var myData = nmsInfoBox._editStringify(this.sw);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-update",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- var result = JSON.parse(data);
- if(result.switches_updated.length > 0) { // FIXME unresolved variable switches_addded
- nmsInfoBox.hide();
- }
- nmsData.invalidate("switches");
- nmsData.invalidate("smanagement");
- }
- });
- }
-};
-
-/*
- * Window type: Show inventory listing
- *
- * Basic window that displays a list of all devices with simple summary information
- *
- * TODO: Set up more complex views with more columns, sorting, etc.
- *
- */
-nmsInfoBox._windowTypes.inventoryListing = {
- content: '',
- childContent: false,
- activeView: '',
- activeFilter: '',
- getTitle: function() {
- return '<h4>Inventory listing</h4><button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'distro_name\');">Distro name</button> <button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'sysDescr\');">System Description</button>';
- },
- getContent: function() {
- return this.content;
- },
- getChildContent: function() {
- return this.childContent;
- },
- setFilter: function(filter) {
- this.activeFilter = filter.toLowerCase();
- nmsInfoBox._windowTypes.inventoryListing.load("refresh");
- },
- getFilter: function() {
- return this.activeFilter;
- },
- load: function(list) {
- var hasSnmp = false;
- var targetArray = [];
- var listTitle = '';
- var needRefresh = false;
- var needSnmp = false;
- var contentObj = document.createElement("div");
- var inputObj = document.createElement("div");
- inputObj.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Filter" id="inventorylisting-filter" value="' + this.activeFilter + '" onkeyup="if (event.keyCode == 13) {nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);}"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);">Filtrer</button></span></div>';
- contentObj.appendChild(inputObj);
-
-
- if(!nmsData.switches || !nmsData.switches.switches)
- return;
- if(!(!nmsData.snmp || !nmsData.snmp.snmp)) {
- hasSnmp = true;
- }
- if(list == "refresh") {
- list = this.activeView;
- needRefresh = true;
- }
-
- switch (list) {
- case 'distro_name':
- listTitle = 'Distro names';
- break;
- case 'sysDescr':
- if(hasSnmp)
- listTitle = 'System description';
- needSnmp = true;
- break;
- default:
- listTitle = 'Distro names';
- list = 'distro_name';
- }
- this.activeView = list;
-
- if(needSnmp && !hasSnmp) {
- this.content = "No SNMP data loaded. Reloading shortly.";
- nmsData.addHandler("snmp","inventoryListing",nmsInfoBox._windowTypes.inventoryListing.update,"snmp-request");
- return;
- }
-
- var resultArray = [];
- for(var sw in nmsData.switches.switches) {
- var value = '';
- if(this.activeFilter != '') {
- if(sw.toLowerCase().indexOf(this.activeFilter) == -1 && !nmsInfoBox._searchSmart(this.activeFilter,sw))
- continue;
- }
- try {
- switch (list) {
- case 'distro_name':
- value = nmsData.switches.switches[sw]["distro_name"];
- break;
- case 'sysDescr':
- value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
- break;
- }
- } catch (e) {
- //console.log(e);
- }
- resultArray.push([sw, value]);
- }
-
- resultArray.sort();
-
- var infotable = nmsInfoBox._makeTable(resultArray,listTitle);
- infotable.id = "inventory-table";
-
- contentObj.appendChild(infotable);
- this.content = contentObj;
- if(needRefresh)
- nmsInfoBox.refresh("soft");
- },
- update: function(type) {
- if(type == "snmp-request") {
- nmsData.unregisterHandler("snmp","inventoryListing");
- nmsInfoBox._windowTypes.inventoryListing.load("refresh");
- }
- },
- unload: function() {
- nmsData.unregisterHandler("snmp","inventoryListing");
- this.content = '';
- this.activeView = '';
- this.activeFilter = '';
- },
- save: function() {
- }
-};
-
-/*
- * Click a switch and display it
- * it.
- */
-nmsInfoBox.click = function(sw)
-{
- this.showWindow("switchInfo",sw);
- this._windowTypes.switchInfo.showComments();
-};
-
-/*
- * General-purpose table-maker?
- *
- * Takes an array of arrays as input, and an optional caption.
- *
- * E.g.: _makeTable([["name","Kjell"],["Age","five"]], "Age list");
- */
-nmsInfoBox._makeTable = function(content, caption) {
- var table = document.createElement("table");
- var tr;
- var td1;
- var td2;
- table.className = "table";
- table.classList.add("table");
- table.classList.add("table-condensed");
- if (caption != undefined) {
- var cap = document.createElement("caption");
- cap.textContent = caption;
- table.appendChild(cap);
- }
- for (var v in content) {
- tr = table.insertRow(-1);
- tr.className = content[v][0].toLowerCase();
- td1 = tr.insertCell(0);
- td2 = tr.insertCell(1);
- td1.innerHTML = content[v][0];
- td2.innerHTML = content[v][1];
- }
- return table;
-};
-
-/*
- * Create and return a table for comments.
- *
- * Input is an array of comments.
- */
-nmsInfoBox._makeCommentTable = function(content) {
- var table = document.createElement("table");
- table.className = "table";
- table.classList.add("table");
- table.classList.add("table-condensed");
- var cap = document.createElement("caption");
- cap.textContent = "Comments"
- table.appendChild(cap);
- for (var commentid in content) {
- var tr;
- var td1;
- var td2;
- var comment = content[commentid];
- var col;
- if (comment["state"] == "active")
- col = "danger";
- else if (comment["state"] == "inactive")
- col = false;
- else
- col = "info";
- tr = table.insertRow(-1);
- tr.id = "commentRow" + comment["id"];
- tr.className = col;
-
- td1 = tr.insertCell(0);
- td1.style.whiteSpace = "nowrap";
- td1.style.width = "8em";
- td2 = tr.insertCell(1);
- var txt = '<div class="btn-group" role="group" aria-label="..."><button type="button" class="btn btn-xs btn-default" data-trigger="focus" data-toggle="popover" title="Info" data-content="Comment added ' + comment["time"] + " by user " + comment["username"] + ' and listed as ' + comment["state"] + '"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-danger" data-trigger="focus" data-toggle="tooltip" title="Mark as deleted" onclick="commentDelete(' + comment["id"] + ');"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-success" data-trigger="focus" data-toggle="tooltip" title="Mark as inactive/fixed" onclick="commentInactive(' + comment["id"] + ');"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-info" data-trigger="focus" data-toggle="tooltip" title="Mark as persistent" onclick="commentPersist(' + comment["id"] + ');"><span class="glyphicon glyphicon-star" aria-hidden="true"></span></button></div>';
- td1.innerHTML = txt;
- td2.innerHTML = comment["comment"];
- }
- return table;
-};
-
-nmsInfoBox._searchSmart = function(id, sw) {
- try {
- try {
- if (nmsData.switches.switches[sw].distro_name.toLowerCase() == id) {
- return true;
- }
- } catch (e) {}
- if (id.match("active")) {
- var limit = id;
- limit = limit.replace("active>","");
- limit = limit.replace("active<","");
- limit = limit.replace("active=","");
- var operator = id.replace("active","")[0];
- if (limit == parseInt(limit)) {
- if (operator == ">" ) {
- if (nmsData.switchstate.switches[sw]['totals'].live > limit) {
- return true;
- }
- } else if (operator == "<") {
- if (nmsData.switchstate.switches[sw]['totals'].live < limit) {
- return true;
- }
- } else if (operator == "=") {
- if (nmsData.switchstate.switches[sw]['totals'].live == limit) {
- return true;
- }
- }
- }
- }
- try {
- if (nmsData.smanagement.switches[sw].mgmt_v4_addr.match(id)) {
- return true;
- }
- if (nmsData.smanagement.switches[sw].mgmt_v6_addr.match(id)) {
- return true;
- }
- } catch (e) {}
- try {
- if (nmsData.smanagement.switches[sw].subnet4.match(id)) {
- return true;
- }
- if (nmsData.smanagement.switches[sw].subnet6.match(id)) {
- return true;
- }
- } catch (e) {}
- if (nmsData.snmp.snmp[sw].misc.sysDescr[0].toLowerCase().match(id)) {
- return true;
- }
- } catch (e) {
- return false;
- }
- return false;
-};
-
-/*
- * FIXME: Not sure this belongs here, it's really part of the "Core" ui,
- * not just the infobox.
- */
-nmsInfoBox._search = function() {
- var el = document.getElementById("searchbox");
- var id = false;
- var matches = [];
- if (el) {
- id = el.value.toLowerCase();
- }
- if(id) {
- nmsMap.enableHighlights();
- for(var sw in nmsData.switches.switches) {
- if(sw.toLowerCase().indexOf(id) > -1) {
- matches.push(sw);
- nmsMap.setSwitchHighlight(sw,true);
- } else if (nmsInfoBox._searchSmart(id,sw)) {
- matches.push(sw);
- nmsMap.setSwitchHighlight(sw,true);
- } else {
- nmsMap.setSwitchHighlight(sw,false);
- }
- }
- } else {
- nmsMap.disableHighlights();
- }
- if(matches.length == 1) {
- document.getElementById("searchbox-submit").classList.add("btn-primary");
- document.getElementById("searchbox").dataset.match = matches[0];
- } else {
- document.getElementById("searchbox-submit").classList.remove("btn-primary");
- document.getElementById("searchbox").dataset.match = '';
- }
-};
-
-nmsInfoBox._searchKeyListener = function(e) {
- switch (e.keyCode) {
- case 13:
- var sw = document.getElementById("searchbox").dataset.match;
- if(sw != '') {
- nmsInfoBox.showWindow("switchInfo",sw);
- this._windowTypes.switchInfo.showComments();
- }
- break;
- case 27:
- document.getElementById("searchbox").dataset.match = '';
- document.getElementById("searchbox").value = '';
- nmsInfoBox._search();
- nmsInfoBox.hide();
- break;
- }
-};
-
-nmsInfoBox._nullBlank = function(x) {
- if (x == null || x == false || x == undefined)
- return "";
- return x;
-};
-
-
-nmsInfoBox._editChange = function(sw, v) {
- var el = document.getElementById("edit-" + sw + "-" + v);
- var val = el.value;
- if (v == "placement") {
- try {
- val = JSON.parse(val);
- el.parentElement.classList.remove("has-error");
- el.parentElement.classList.add("has-success");
- } catch (e) {
- el.parentElement.classList.add("has-error");
- return;
- }
- }
- nmsInfoBox._editValues[v] = val;
- el.classList.add("has-warning");
- var myData = nmsInfoBox._editStringify(sw);
- var out = document.getElementById("edit-output");
- out.value = myData;
-};
-
-nmsInfoBox._editStringify = function(sw) {
- nmsInfoBox._editValues['sysname'] = sw;
- return JSON.stringify([nmsInfoBox._editValues]);
-};
diff --git a/web/nms-public.gathering.org/js/nms-map-handlers.js b/web/nms-public.gathering.org/js/nms-map-handlers.js
deleted file mode 100644
index 868d26d..0000000
--- a/web/nms-public.gathering.org/js/nms-map-handlers.js
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Map handlers/updaters for NMS.
- *
- * These are functions used to determine how the map should look in NMS.
- * They represent vastly different information, but in a uniform way.
- *
- * The idea is that these updaters only parse information that's fetched by
- * NMS - they do not request additional information. E.g., ping data is
- * always present, but until the ping-handler is active, it isn't
- * displayed. This might seem redundant, but it means any handler can
- * utilize information from any aspect of NMS, and thus opens NMS up to the
- * world of intelligent maps base don multiple data sources.
- *
- * Warning: This paradigm will change. Handlers will be expected to
- * register their own callbacks for nmsData. Work in progress.
- *
- */
-
-/*
- */
-
-var handler_uplinks = {
- init:uplinkInit,
- tag:"uplink",
- name:"Uplink map"
-};
-
-var handler_temp = {
- init:tempInit,
- tag:"temp",
- name:"Temperature map"
-};
-
-var handler_ping = {
- init:pingInit,
- tag:"ping",
- name:"IPv4 Ping map"
-};
-
-var handler_traffic = {
- init:trafficInit,
- tag:"traffic",
- name:"Uplink traffic map"
-};
-
-var handler_traffic_tot = {
- init:trafficTotInit,
- tag:"traffictot",
- name:"Switch traffic map"
-};
-
-var handler_dhcp = {
- init:dhcpInit,
- tag:"dhcp",
- name:"DHCP map"
-};
-
-var handler_disco = {
- init:discoInit,
- tag:"disco",
- name:"Disco fever"
-};
-
-var handler_comment = {
- init:commentInit,
- tag:"comment",
- name:"Fresh comment spotter"
-};
-
-var handler_snmp = {
- init:snmpInit,
- tag:"snmp",
- name:"SNMP state"
-};
-
-var handler_cpu = {
- init:cpuInit,
- tag:"cpu",
- name:"CPU utilization"
-};
-
-var handlers = [
- handler_uplinks,
- handler_temp,
- handler_ping,
- handler_traffic,
- handler_disco,
- handler_comment,
- handler_traffic_tot,
- handler_dhcp,
- handler_snmp,
- handler_cpu
- ];
-
-/*
- * Update function for uplink map
- */
-function uplinkUpdater()
-{
- if (!nmsData.switches)
- return;
- if (!nmsData.switches.switches)
- return;
- if (!nmsData.switchstate)
- return;
- if (!nmsData.switchstate.switches)
- return;
- for (var sw in nmsData.switches.switches) {
- var uplinks=0;
- if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) {
- uplinks=0;
- } else {
- uplinks = nmsData.switchstate.switches[sw].uplinks.live;
- nuplinks = nmsData.switchstate.switches[sw].uplinks.total;
- }
-
- if (uplinks == 0) {
- nmsMap.setSwitchColor(sw,"white");
- } else if (uplinks == 1) {
- nmsMap. setSwitchColor(sw, red);
- } else if (uplinks == 2) {
- nmsMap.setSwitchColor(sw, orange);
- } else if (uplinks == 3) {
- nmsMap.setSwitchColor(sw,green);
- } else if (uplinks > 3) {
- nmsMap.setSwitchColor(sw, blue);
- }
- }
-}
-
-/*
- * Init-function for uplink map
- */
-function uplinkInit()
-{
- nmsData.addHandler("switches","mapHandler",uplinkUpdater);
- nmsData.addHandler("switchstate","mapHandler",uplinkUpdater);
- setLegend(1,"white","0 uplinks");
- setLegend(2,red,"1 uplink");
- setLegend(3,orange,"2 uplinks");
- setLegend(4,green,"3 uplinks");
- setLegend(5,blue,"4 uplinks");
-}
-
-/*
- * Init-function for uplink map
- */
-function trafficInit()
-{
- nmsData.addHandler("switches","mapHandler",trafficUpdater);
- nmsData.addHandler("switchstate","mapHandler",trafficUpdater);
- var m = 1024 * 1024 / 8;
- drawGradient([lightgreen,green,orange,red]);
- setLegend(1,colorFromSpeed(0),"0 (N/A)");
- setLegend(5,colorFromSpeed(1100 * m) , "1100Mb/s");
- setLegend(4,colorFromSpeed(600 * m),"600Mb/s");
- setLegend(3,colorFromSpeed(300 * m),"300Mb/s");
- setLegend(2,colorFromSpeed(10 * m),"10Mb/s");
-}
-
-function trafficUpdater()
-{
- if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
- return;
- for (var sw in nmsData.switchstate.switches) {
- var speed = 0;
- try {
- var t = parseInt(nmsData.switchstate.then[sw].uplinks.ifHCOutOctets);
- var n = parseInt(nmsData.switchstate.switches[sw].uplinks.ifHCOutOctets);
- var tt = parseInt(nmsData.switchstate.then[sw].time);
- var nt = parseInt(nmsData.switchstate.switches[sw].time);
- } catch (e) { continue;};
- var tdiff = nt - tt;
- var diff = n - t;
- speed = diff / tdiff;
- if(!isNaN(speed)) {
- nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
- nmsMap.setSwitchInfo(sw,byteCount(speed*8,0));
- }
- }
-}
-
-function trafficTotInit()
-{
- nmsData.addHandler("switches","mapHandler",trafficTotUpdater);
- nmsData.addHandler("switchstate","mapHandler",trafficTotUpdater);
- var m = 1024 * 1024 / 8;
- drawGradient([lightgreen,green,orange,red]);
- setLegend(1,colorFromSpeed(0),"0 (N/A)");
- setLegend(5,colorFromSpeed(5000 * m,5) , "5000Mb/s");
- setLegend(4,colorFromSpeed(3000 * m,5),"3000Mb/s");
- setLegend(3,colorFromSpeed(1000 * m,5),"1000Mb/s");
- setLegend(2,colorFromSpeed(100 * m,5),"100Mb/s");
-}
-
-function trafficTotUpdater()
-{
- if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
- return;
- for (var sw in nmsData.switchstate.switches) {
- var speed = 0;
- try {
- var t = parseInt(nmsData.switchstate.then[sw].totals.ifHCOutOctets);
- var n = parseInt(nmsData.switchstate.switches[sw].totals.ifHCOutOctets);
- var tt = parseInt(nmsData.switchstate.then[sw].time);
- var nt = parseInt(nmsData.switchstate.switches[sw].time);
- } catch (e) { continue;};
- var tdiff = nt - tt;
- var diff = n - t;
- speed = diff / tdiff;
- if(!isNaN(speed))
- nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
- }
-}
-
-function colorFromSpeed(speed,factor)
-{
- var m = 1024 * 1024 / 8;
- if (factor == undefined)
- factor = 1.1;
- if (speed == 0)
- return blue;
- speed = speed < 0 ? 0 : speed;
- return getColorStop( 1000 * (speed / (factor * (1000 * m))));
-}
-
-/*
- * Tweaked this to scale from roughly 20C to 35C. Hence the -20 and /15
- * thing (e.g., "0" is 20 and "15" is 35 by the time we pass it to
- * rgb_from_max());
- */
-function temp_color(t)
-{
- if (t == undefined) {
- console.log("Temp_color, but temp is undefined");
- return blue;
- }
- t = parseInt(t) - 12;
- t = Math.floor((t / 23) * 1000);
- return getColorStop(t);
-}
-
-function tempUpdater()
-{
- if(!nmsData.switches)
- return;
-
- for ( var sw in nmsData.switches["switches"]) {
- var t = "white";
- var temp = "";
-
- if(!nmsData.switchstate || !nmsData.switchstate.switches || !nmsData.switchstate.switches[sw] || !nmsData.switchstate.switches[sw].temp)
- continue;
-
- var t = nmsData.switchstate.switches[sw].temp;
- temp = t + "°C";
- t = temp_color(temp);
- nmsMap.setSwitchColor(sw, t);
- nmsMap.setSwitchInfo(sw, temp);
-
- }
-}
-
-function tempInit()
-{
- //Padded the gradient with extra colors for the upper unused values
- drawGradient(["black",blue,lightblue,lightgreen,green,orange,red]);
- setLegend(1,temp_color(15),"15 °C");
- setLegend(2,temp_color(20),"20 °C");
- setLegend(3,temp_color(25),"25 °C");
- setLegend(4,temp_color(30),"30 °C");
- setLegend(5,temp_color(35),"35 °C");
- nmsData.addHandler("switchstate","mapHandler",tempUpdater);
-}
-
-function pingUpdater()
-{
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- for (var sw in nmsData.switches.switches) {
- try {
- var c;
- if (nmsData.ping.switches[sw].age > 0) {
- c = red;
- } else {
- c = gradient_from_latency(nmsData.ping.switches[sw].latency);
- }
- nmsMap.setSwitchColor(sw, c);
- } catch (e) {
- nmsMap.setSwitchColor(sw, blue);
- }
- }
-}
-
-function pingInit()
-{
- drawGradient([green,lightgreen,orange,red]);
- setLegend(1,gradient_from_latency(1),"1ms");
- setLegend(2,gradient_from_latency(30),"30ms");
- setLegend(3,gradient_from_latency(60),"60ms");
- setLegend(4,gradient_from_latency(100),"100ms");
- setLegend(5,gradient_from_latency(undefined) ,"No response");
- nmsData.addHandler("ping","mapHandler",pingUpdater);
- nmsData.addHandler("switches","mapHandler",pingUpdater);
- nmsData.addHandler("ticker", "mapHandler", pingUpdater);
-}
-
-function commentUpdater()
-{
- var realnow = Date.now();
- var now = Math.floor(realnow / 1000);
- if (nmsData.comments == undefined || nmsData.comments.comments == undefined) {
- return
- }
- if(!nmsData.switches)
- return;
- for (var sw in nmsData.switches.switches) {
- var c = "white";
- if (nmsData.comments.comments[sw] == undefined) {
- nmsMap.setSwitchColor(sw,c);
- continue;
- }
- var s = nmsData.comments.comments[sw];
- var then = 0;
- var active = 0;
- var persist = 0;
- c = "yellow";
- for (var v in s["comments"]) {
- var then_test = parseInt(s["comments"][v]["time"]);
- if (then_test > then && s["comments"][v]["state"] != "inactive")
- then = then_test;
- if (s["comments"][v]["state"] == "active") {
- active++;
- }
- if (s["comments"][v]["state"] == "persist")
- persist++;
- }
- if (then > (now - (60*15))) {
- c = red;
- } else if (active > 0) {
- c = orange;
- } else if (persist > 0) {
- c = blue;
- } else {
- c = green;
- }
- nmsMap.setSwitchColor(sw, c);
- }
-}
-
-
-function commentInit()
-{
- nmsData.addHandler("comments","mapHandler",commentUpdater);
- setLegend(1,"white","0 comments");
- setLegend(2,blue,"Persistent");
- setLegend(3,red, "New");
- setLegend(4,orange,"Active");
- setLegend(5,green ,"Old/inactive only");
-}
-
-function getDhcpColor(stop)
-{
- stop = parseInt(stop);
- stop = stop * 0.85;
- if (stop < 0)
- stop = 1000;
- if (stop > 1000)
- stop = 1000;
- return getColorStop(stop);
-}
-
-function dhcpUpdater()
-{
- var realnow = Date.now();
- var now = Math.floor(realnow / 1000);
- if (nmsData.dhcp == undefined || nmsData.dhcp.dhcp == undefined) {
- return
- }
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- try {
- for (var sw in nmsData.switches.switches) {
- var c = "white";
- if (nmsData.dhcp.dhcp[sw] == undefined) {
- nmsMap.setSwitchColor(sw,c);
- continue;
- }
- var s = nmsData.dhcp.dhcp[sw];
- var then = parseInt(s);
- c = getDhcpColor(now - then);
- nmsMap.setSwitchColor(sw, c);
- }
- } catch(e) {
- console.log(e);
- }
-}
-
-function dhcpInit()
-{
- drawGradient([green,lightgreen,orange,red]);
- nmsData.addHandler("dhcp","mapHandler",dhcpUpdater);
- setLegend(1,"white","Undefined");
- setLegend(2,getDhcpColor(1),"1 Second old");
- setLegend(3,getDhcpColor(300),"300 Seconds old");
- setLegend(4,getDhcpColor(900),"900 Seconds old");
- setLegend(5,getDhcpColor(1200),"1200 Seconds old");
-}
-
-/*
- * Testing-function to randomize colors of linknets and switches
- */
-function randomizeColors()
-{
-/* for (var i in nms.switches_now.linknets) {
- setLinknetColors(i, getRandomColor(), getRandomColor());
- }
-*/
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- for (var sw in nmsData.switches.switches) {
- nmsMap.setSwitchColor(sw, getRandomColor());
- }
-}
-
-function discoDo() {
- randomizeColors();
- setTimeout(randomizeColors,500);
-}
-function discoInit()
-{
- nmsData.addHandler("ticker", "mapHandler", discoDo);
-
- setNightMode(true);
- setLegend(1,blue,"Y");
- setLegend(2,red, "M");
- setLegend(3,orange,"C");
- setLegend(4,green, "A");
- setLegend(5,"white","!");
-}
-
-function snmpUpdater() {
- for (var sw in nmsData.switches.switches) {
- if (nmsData.snmp.snmp[sw] == undefined || nmsData.snmp.snmp[sw].misc == undefined) {
- nmsMap.setSwitchColor(sw, red);
- } else if (nmsData.snmp.snmp[sw].misc.sysName[0] != sw) {
- nmsMap.setSwitchColor(sw, orange);
- } else {
- nmsMap.setSwitchColor(sw, green);
- }
- }
-}
-function snmpInit() {
- nmsData.addHandler("snmp", "mapHandler", snmpUpdater);
-
- setLegend(1,green,"OK");
- setLegend(2,orange, "Sysname mismatch");
- setLegend(3,red,"No SNMP data");
- setLegend(4,green, "");
- setLegend(5,green,"");
-
-}
-function cpuUpdater() {
- for (var sw in nmsData.switches.switches) {
- try {
- var cpu = 0;
- for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingCPU) {
- var local = nmsData.snmp.snmp[sw].misc['jnxOperatingCPU'][u];
- cpu = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingCPU[u],cpu);
- }
- nmsMap.setSwitchColor(sw, getColorStop(cpu * 10));
- nmsMap.setSwitchInfo(sw, cpu + " % ");
- } catch (e) {
- nmsMap.setSwitchColor(sw, "white");
- nmsMap.setSwitchInfo(sw, "N/A");
- }
- }
-}
-
-function cpuInit() {
- nmsData.addHandler("snmp", "mapHandler", cpuUpdater);
- drawGradient([green,orange,red]);
- setLegend(1,getColorStop(0),"0 %");
- setLegend(2,getColorStop(250),"25 %");
- setLegend(3,getColorStop(600),"60 %");
- setLegend(4,getColorStop(1000),"100 %");
- setLegend(5,"white","N/A");
-}
diff --git a/web/nms-public.gathering.org/js/nms-map.js b/web/nms-public.gathering.org/js/nms-map.js
deleted file mode 100644
index ada6886..0000000
--- a/web/nms-public.gathering.org/js/nms-map.js
+++ /dev/null
@@ -1,580 +0,0 @@
-"use strict";
-
-/* WORK
- * IN
- * PROGRESS
- *
- * Interface:
- *
- * nmsMap.init() - start things up
- * nmsMap.setSwitchColor(switch,color)
- * nmsMap.setSwitchInfo(switch,info)
- * nmsMap.setSwitchHighlight(switch,true/false)
- * nmsMap.enableHighlights()
- * nmsMap.disableHighlights()
- */
-
-
-var nmsMap = nmsMap || {
- _moveInProgress: false,
- stats: {
- colorChange:0,
- colorSame:0,
- earlyDrawAll:0,
- nowDups:0,
- nows:0,
- resizeEvents:0,
- switchInfoSame:0,
- switchInfoUpdate:0,
- highlightChange:0
- },
- contexts: ["bg","link","blur","switch","text","textInfo","top","input","hidden"],
- _info: {},
- _settings: {
- fontLineFactor: 2,
- textMargin: 3,
- xMargin: 10,
- yMargin: 20,
- fontSize: 15,
- fontFace: "sans-serif"
- },
- scale: 1,
- _init: true,
- _orig: { width:1920, height:1032 },
- _canvas: {
- get width() { return nmsMap.scale * nmsMap._orig.width; },
- get height() { return nmsMap.scale * nmsMap._orig.height; }
- },
-
- _color: { },
- _linknets: {} ,
- _highlight: { },
- _highlightActive: false,
- _c: {}
-};
-
-nmsMap._loadEvent = function(e) {
- nmsMap._init = false;
- nmsMap._drawAllSwitches();
-};
-
-nmsMap.init = function() {
- this._initContexts();
- this._init = true;
- nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();});
- window.addEventListener('resize',nmsMap._resizeEvent,true);
- window.addEventListener('load',nmsMap._loadEvent,true);
-};
-
-nmsMap.setSwitchColor = function(sw, color) {
- if (this._color[sw] != color) {
- this._color[sw] = color;
- this._drawSwitch(sw);
- this.stats.colorChange++;
- } else {
- this.stats.colorSame++;
- }
-};
-
-
-nmsMap.setSwitchHighlight = function(sw, highlight) {
- if( highlight )
- highlight = true;
- if ( this._highlight[sw] != highlight ) {
- this.stats.highlightChange++;
- this._highlight[sw] = highlight;
- }
- this._drawSwitch(sw);
-};
-
-
-nmsMap.enableHighlights = function() {
- this._highlightActive = true;
-};
-
-
-nmsMap.disableHighlights = function() {
- this._highlightActive = false;
- this._drawAllSwitches();
-};
-
-
-nmsMap.reset = function() {
- for (var sw in this._color) {
- nmsMap.setSwitchColor(sw, undefined);
- }
- for (var sw in this._info) {
- nmsMap.setSwitchInfo(sw, undefined);
- }
-};
-
-nmsMap.setSwitchInfo = function(sw,info) {
- if (this._info[sw] != info) {
- this._info[sw] = info;
- this._drawSwitchInfo(sw);
- this.stats.switchInfoUpdate++;
- } else {
- this.stats.switchInfoSame++;
- }
-};
-
-nmsMap._initContext = function(name) {
- this._c[name] = {};
- this._c[name].c = document.getElementById(name + "Canvas");
- this._c[name].ctx = this._c[name].c.getContext('2d');
-};
-
-nmsMap._initContexts = function() {
- for (var context in this.contexts) {
- this._initContext(this.contexts[context]);
- }
-};
-
-nmsMap._resizeEvent = function() {
- var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft;
- var height = window.innerHeight - nmsMap._c.bg.c.offsetTop;
-
- var xScale = (width / (nmsMap._orig.width + nmsMap._settings.xMargin));
- var yScale = (height / (nmsMap._orig.height + nmsMap._settings.yMargin));
-
- if (xScale > yScale) {
- nmsMap.scale = yScale;
- } else {
- nmsMap.scale = xScale;
- }
- for (var a in nmsMap._c) {
- /*
- * Resizing this to a too small size breaks gradients on smaller screens.
- */
- if (a == 'hidden' && a != 'blur')
- continue;
- nmsMap._c[a].c.height = nmsMap._canvas.height;
- nmsMap._c[a].c.width = nmsMap._canvas.width;
- if(a == 'bg') {
- nmsMap._drawBG();
- }
- }
- if (nmsMap._init != true) {
- nmsMap._blurDrawn = false;
- nmsMap._drawBG();
- nmsMap._drawAllSwitches();
- nmsMap._drawAllLinknets();
- nmsMap.drawNow();
- nmsMap.stats.resizeEvents++;
- }
-};
-
-/*
- * Draw current time-window
- *
- * FIXME: The math here is just wild approximation and guesswork because
- * I'm lazy.
- *
- * FIXME: 2: Should really just use _drawText() instead somehow. Font size
- * being an issue.
- */
-nmsMap.drawNow = function ()
-{
- var now = nmsData.now;
- if (nmsMap._lastNow == now) {
- nmsMap.stats.nowDups++;
- return;
- }
- nmsMap.stats.nows++;
-
- var ctx = nmsMap._c.top.ctx;
- ctx.save();
- ctx.scale(this.scale, this.scale);
- ctx.font = (2 * this._settings.fontSize) + "px " + this._settings.fontFace;
- ctx.clearRect(0,0,800,100);
- ctx.fillStyle = "white";
- ctx.strokeStyle = "black";
- ctx.lineWidth = nms.fontLineFactor;
- ctx.strokeText(now, this._settings.textMargin, 25);
- ctx.fillText(now, this._settings.textMargin, 25);
- ctx.restore();
-};
-
-nmsMap.setNightMode = function(toggle) {
- if (this._nightmode == toggle)
- return;
- this._nightmode = toggle;
- if (this._init == true) {
- return;
- }
- if (!toggle)
- this._c.blur.c.style.display = "none";
- else {
- this._drawAllBlur();
- this._c.blur.c.style.display = "";
- }
- nmsMap._drawBG();
-};
-
-nmsMap._drawBG = function() {
- var imageObj = document.getElementById('source');
- this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
- if(this._nightmode)
- nmsMap._invertBG();
-};
-
-nmsMap._invertBG = function() {
- var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
- var data = imageData.data;
-
- for(var i = 0; i < data.length; i += 4) {
- data[i] = 255 - data[i];
- data[i + 1] = 255 - data[i + 1];
- data[i + 2] = 255 - data[i + 2];
- }
- this._c.bg.ctx.putImageData(imageData, 0, 0);
-};
-
-nmsMap._getBox = function(sw) {
- var box = nmsData.switches.switches[sw]['placement'];
- box.x = parseInt(box.x);
- box.y = parseInt(box.y);
- box.width = parseInt(box.width);
- box.height = parseInt(box.height);
- return box;
-};
-
-nmsMap._drawSwitchBlur = function(sw)
-{
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
- return;
- var box = this._getBox(sw);
- this._c.blur.ctx.save();
- this._c.blur.ctx.fillStyle = "red";
- this._c.blur.ctx.shadowBlur = 30;
- this._c.blur.ctx.shadowColor = "white";
- this._c.blur.ctx.scale(this.scale, this.scale); // FIXME <- fix what?!
- this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']);
- this._c.blur.ctx.restore();
-};
-
-nmsMap._drawSwitch = function(sw)
-{
- // XXX: If a handler sets a color before switches are loaded... The
- // color will get set fine so this isn't a problem.
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
- return;
- var box = this._getBox(sw);
- var color = nmsMap._color[sw];
- if(this._highlightActive) {
- if(nmsMap._highlight[sw]) {
- color = green;
- } else {
- color = white;
- }
- }
- if (color == undefined) {
- color = blue;
- }
- this._c.switch.ctx.fillStyle = color;
- this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']);
- this._c.switch.ctx.shadowBlur = 0;
- this._drawText(this._c.text.ctx, sw,box);
-
- if(this._info[sw])
- this._drawSwitchInfo(sw);
-};
-
-nmsMap._drawSwitchInfo = function(sw) {
- var box = this._getBox(sw);
- if (this._info[sw] == undefined) {
- this._clearBox(this._c.textInfo.ctx, box);
- } else {
- this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right");
- }
-};
-
-nmsMap._clearBox = function(ctx,box) {
- ctx.save();
- ctx.scale(this.scale,this.scale);
- ctx.clearRect(box['x'], box['y'], box['width'], box['height']);
- ctx.restore();
-};
-
-nmsMap._drawText = function(ctx, text, box, align) {
- var rotate = false;
-
- if ((box['width'] + 10 )< box['height'])
- rotate = true;
-
- this._clearBox(ctx,box);
- ctx.save();
- ctx.scale(this.scale, this.scale);
- ctx.font = "bold " + this._settings.fontSize + "px " + this._settings.fontFace;
- ctx.lineWidth = nmsMap._settings.fontLineFactor;
- ctx.fillStyle = "white";
- ctx.strokeStyle = "black";
- ctx.translate(box.x + this._settings.textMargin, box.y + box.height - this._settings.textMargin);
-
- if (rotate) {
- ctx.translate(box.width - this._settings.textMargin * 2,0);
- ctx.rotate(Math.PI * 3/2);
- }
-
- if (align == "right") {
- ctx.textAlign = "right";
- /*
- * Margin*2 is to compensate for the margin above.
- */
- if (rotate)
- ctx.translate(box.height - this._settings.textMargin*2,0);
- else
- ctx.translate(box.width - this._settings.textMargin*2,0);
- }
-
- ctx.strokeText(text, 0, 0);
- ctx.fillText(text, 0, 0);
- ctx.restore();
-};
-
-nmsMap._setLinknetColor = function(l, color1, color2)
-{
- var oldcolor1;
- var oldcolor2;
- try {
- oldcolor1 = nmsMap._linknets[l].sysname1;
- oldcolor2 = nmsMap._linknets[l].sysname2;
- if (oldcolor1 == color1 && oldcolor2 == color2) {
- return ;
- }
- } catch (e) {}
- nmsMap._linknets[l] = {};
- nmsMap._linknets[l].sysname1 = color1;
- nmsMap._linknets[l].sysname2 = color2;
- nmsMap._drawLinknet(l)
-}
-
-nmsMap._drawLinknet = function(l) {
- try {
- var color1 = blue;
- var color2 = blue;
- try {
- color1 = nmsMap._linknets[l].sysname1;
- color2 = nmsMap._linknets[l].sysname2;
- } catch(e) { }
- nmsMap._connectSwitches(nmsData.switches.linknets[l].sysname1, nmsData.switches.linknets[l].sysname2, color1, color2);
- } catch(e) { }
-}
-
-nmsMap._drawAllLinknets = function() {
- for (var l in nmsData.switches.linknets) {
- nmsMap._drawLinknet(l);
- }
-}
-nmsMap._drawAllSwitches = function() {
- if (nmsData.switches == undefined) {
- this.stats.earlyDrawAll++;
- return;
- }
- for (var sw in nmsData.switches.switches) {
- this._drawSwitch(sw);
- }
- if (this._nightmode)
- this._drawAllBlur();
-};
-
-nmsMap._drawAllBlur = function() {
- if (nmsMap._blurDrawn == true)
- return;
- nmsMap._blurDrawn = true;
- for (var sw in nmsData.switches.switches) {
- nmsMap._drawSwitchBlur(sw);
- }
-};
-
-nmsMap._drawBox = function(ctx, x, y, boxw, boxh) {
- ctx.save();
- ctx.scale(this.scale, this.scale); // FIXME <- what?!
- ctx.fillRect(x,y, boxw, boxh);
- ctx.lineWidth = 1;
- ctx.strokeStyle = "#000000";
- ctx.strokeRect(x,y, boxw, boxh);
- ctx.restore();
-};
-
-nmsMap._connectSwitches = function(sw1, sw2, color1, color2) {
- nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2),
- color1, color2);
-};
-
-/*
- * Draw a line between two boxes, with a gradient going from color1 to
- * color2.
- */
-nmsMap._connectBoxes = function(box1, box2,color1, color2) {
- var ctx = nmsMap._c.link.ctx;
- if (color1 == undefined)
- color1 = blue;
- if (color2 == undefined)
- color2 = blue;
- var x0 = Math.floor(box1.x + box1.width/2);
- var y0 = Math.floor(box1.y + box1.height/2);
- var x1 = Math.floor(box2.x + box2.width/2);
- var y1 = Math.floor(box2.y + box2.height/2);
- ctx.save();
- ctx.scale(nmsMap.scale, nmsMap.scale);
- var gradient = ctx.createLinearGradient(x1,y1,x0,y0);
- gradient.addColorStop(0, color1);
- gradient.addColorStop(1, color2);
- ctx.strokeStyle = gradient;
- ctx.beginPath();
- ctx.moveTo(x0,y0);
- ctx.lineTo(x1,y1);
- ctx.lineWidth = 5;
- ctx.stroke();
- ctx.closePath();
- ctx.restore();
-};
-
-nmsMap.moveSet = function(toggle) {
- nmsMap._moveInProgress = toggle;
- if (!toggle)
- nmsMap._moveStopListen();
-};
-
-/*
- * onclick handler for the canvas.
- *
- * Currently just shows info for a switch.
- */
-nmsMap.canvasClick = function(e)
-{
- var sw = findSwitch(e.pageX - e.target.offsetLeft, e.pageY - e.target.offsetTop);
- if (sw != undefined) {
- if (nmsMap._moveInProgress) {
- nmsMap._moveStart(sw, e);
- } else {
- nmsInfoBox.click(sw);
- }
- } else {
- nmsInfoBox.hide();
- }
-};
-
-nmsMap._clearOld = function(box) {
- if (box) {
- nmsMap._c.top.ctx.save();
- nmsMap._c.top.ctx.fillStyle = "#000000";
- nmsMap._c.top.ctx.scale(nmsMap.scale, nmsMap.scale); // FIXME
- nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10);
- nmsMap._c.top.ctx.restore();
- }
-};
-
-nmsMap._moveMove = function(e) {
- nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
- nmsMap._moveY = (e.pageY - e.target.offsetTop) / nmsMap.scale;
- var diffx = nmsMap._moveX - nmsMap._moveXstart;
- var diffy = nmsMap._moveY - nmsMap._moveYstart;
- var box = {};
- nmsMap._clearOld(nmsMap._moveOldBox);
- box['x'] = nmsMap._moveBox['x'] + diffx;
- box['y'] = nmsMap._moveBox['y'] + diffy;
- box['height'] = nmsMap._moveBox['height'];
- box['width'] = nmsMap._moveBox['width'];
- nmsMap._moveOldBox = box;
- nmsMap._c.top.ctx.save();
- nmsMap._c.top.ctx.fillStyle = "red";
- nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']);
- nmsMap._c.top.ctx.restore();
-};
-
-nmsMap._moveSubmit = function() {
- var data = {
- sysname: nmsMap._moving,
- placement: nmsMap._moveOldBox
- };
- var myData = JSON.stringify([data]);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-update",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("switches");
- }
- });
-};
-
-nmsMap._moveStopListen = function() {
- nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true);
- nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true);
-};
-
-nmsMap._moveDone = function(e) {
- nmsMap._moveStopListen();
- if(nmsMap._moveOldBox == false) {
- return;
- }
- nmsMap._moveSubmit();
- nmsMap._clearOld(nmsMap._moveOldBox);
-};
-
-nmsMap._moveStart = function(sw, e)
-{
- nmsMap._moving = sw;
- nmsMap._moveOldBox = false;
- nmsMap._moveXstart = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
- nmsMap._moveYstart = (e.pageY - e.target.offsetTop) / nmsMap.scale;
- nmsMap._moveBox = nmsData.switches.switches[sw].placement;
- nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true);
- nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true);
-};
-
-
-/*
- * STUFF NOT YET INTEGRATED, BUT MOVED AWAY FROM nms.js TO TIDY.
- *
- * Consider this a TODO list.
- */
-
-/*
- * Draw a linknet with index i.
- *
- * XXX: Might have to change the index here to match backend
- */
-function drawLinknet(i)
-{
- var c1 = nms.linknet_color[i] && nms.linknet_color[i].c1 ? nms.linknet_color[i].c1 : blue;
- var c2 = nms.linknet_color[i] && nms.linknet_color[i].c2 ? nms.linknet_color[i].c2 : blue;
- if (nmsData.switches.switches[nmsData.switches.linknets[i].sysname1] && nmsData.switches.switches[nmsData.switches.linknets[i].sysname2]) {
- connectSwitches(nmsData.switches.linknets[i].sysname1,nmsData.switches.linknets[i].sysname2, c1, c2);
- }
-}
-
-/*
- * Draw all linknets
- */
-function drawLinknets()
-{
- if (nmsData.switches && nmsData.switches.linknets) {
- for (var i in nmsData.switches.linknets) {
- drawLinknet(i);
- }
- }
-}
-
-/*
- * Change both colors of a linknet.
- *
- * XXX: Probably have to change this to better match the backend data
- */
-function setLinknetColors(i,c1,c2)
-{
- if (!nms.linknet_color[i] ||
- nms.linknet_color[i].c1 != c1 ||
- nms.linknet_color[i].c2 != c2) {
- if (!nms.linknet_color[i])
- nms.linknet_color[i] = {};
- nms.linknet_color[i]['c1'] = c1;
- nms.linknet_color[i]['c2'] = c2;
- drawLinknet(i);
- }
-}
-
-
diff --git a/web/nms-public.gathering.org/js/nms.js b/web/nms-public.gathering.org/js/nms.js
deleted file mode 100644
index 8783844..0000000
--- a/web/nms-public.gathering.org/js/nms.js
+++ /dev/null
@@ -1,692 +0,0 @@
-"use strict";
-var nms = {
- stats:{}, // Various internal stats
- get nightMode() { return this._nightMode; },
- set nightMode(val) { if (val != this._nightMode) { this._nightMode = val; setNightMode(val); } },
- /*
- * FIXME: This should be slightly smarter.
- */
- _now: false,
- get now() { return this._now },
- set now(v) { this._now = v; nmsData.now = v; },
- /*
- * Various setInterval() handlers. See nmsTimer() for how they are
- * used.
- *
- * FIXME: Should just stop using these.
- */
- timers: {
- playback:false
- },
-
- menuShowing:true,
- /*
- * This is a list of nms[x] variables that we store in our
- * settings-cookie when altered and restore on load.
- */
- settingsList:[
- 'nightMode',
- 'menuShowing'
- ],
- keyBindings:{
- '-':toggleMenu,
- 'n':toggleNightMode,
- '1':setMapModeFromN,
- '2':setMapModeFromN,
- '3':setMapModeFromN,
- '4':setMapModeFromN,
- '5':setMapModeFromN,
- '6':setMapModeFromN,
- '7':setMapModeFromN,
- '8':setMapModeFromN,
- '9':setMapModeFromN,
- 'c':toggleConnect,
- 'h':moveTimeFromKey,
- 'j':moveTimeFromKey,
- 'k':moveTimeFromKey,
- 'l':moveTimeFromKey,
- 'p':moveTimeFromKey,
- 'r':moveTimeFromKey,
- 'Escape':hideWindow,
- '?':toggleHelp
- },
- /*
- * Playback controllers and variables
- */
- playback:{
- startTime: false,
- stopTime: false,
- playing: false,
- replayTime: 0,
- replayIncrement: 60 * 60
- }
-};
-
-/*
- * Returns a handler object.
- *
- * This might seem a bit much for 'setInterval()' etc, but it's really more
- * about self-documentation and predictable ways of configuring timers.
- */
-function nmsTimer(handler, interval, name, description) {
- this.handler = handler;
- this.handle = false;
- this.interval = parseInt(interval);
- this.name = name;
- this.description = description;
- this.start = function() {
- if (this.handle) {
- this.stop();
- }
- this.handle = setInterval(this.handler,this.interval);
- };
- this.stop = function() {
- if (this.handle)
- clearInterval(this.handle);
- this.handle = false;
- };
-
- this.setInterval = function(interval) {
- var started = this.handle != false;
- this.stop();
- this.interval = parseInt(interval);
- if (started)
- this.start();
- };
-}
-
-
-/*
- * Convenience function that doesn't support huge numbers, and it's easier
- * to comment than to fix. But not really, but I'm not fixing it anyway.
- */
-function byteCount(bytes,precision) {
- if (precision ==undefined)
- precision = 1;
- var units = ['', 'K', 'M', 'G', 'T', 'P'];
- var i = 0;
- while (bytes > 1024) {
- bytes = bytes / 1024;
- i++;
- }
- return bytes.toFixed(precision) + units[i];
-}
-
-/*
- * Definitely not a way to toggle night mode. Does something COMPLETELY
- * DIFFERENT.
- */
-function toggleNightMode()
-{
- nms.nightMode = !nms.nightMode;
- saveSettings();
-}
-
-/*
- * Parse 'now' from user-input.
- *
- * Should probably just use stringToEpoch() instead, but alas, not yet.
- */
-function parseNow(now)
-{
- if (Date.parse(now)) {
- // Adjust for timezone when converting from epoch (UTC) to string (local)
- var d = new Date(now);
- var timezoneOffset = d.getTimezoneOffset() * -60000;
- var d = new Date(Date.parse(now) - timezoneOffset);
- var str = d.getFullYear() + "-" + ("00" + (parseInt(d.getMonth())+1)).slice(-2) + "-" + ("00" + d.getDate()).slice(-2) + "T";
- str += ("00" + d.getHours()).slice(-2) + ":" + ("00" + d.getMinutes()).slice(-2) + ":" + ("00" + d.getSeconds()).slice(-2);
- return str;
-
- }
- if (now == "")
- return "";
- return false;
-}
-
-/*
- * Convert back and forth between epoch.
- *
- * There's no particular reason why I use seconds instead of javascript
- * microseconds, except to leave the mark of a C coder on this javascript
- * project.
- */
-function stringToEpoch(t)
-{
- var foo = t.toString();
-// foo = foo.replace('T',' ');
- var ret = new Date(Date.parse(foo));
- return parseInt(parseInt(ret.valueOf()) / 1000);
-}
-
-/*
- * Have to pad with zeroes to avoid "17:5:0" instead of the conventional
- * and more readable "17:05:00". I'm sure there's a better way, but this
- * works just fine.
- */
-function epochToString(t)
-{
- // Adjust for timezone when converting from epoch (UTC) to string (local)
- var date = new Date(parseInt(t) * parseInt(1000));
- var timezoneOffset = date.getTimezoneOffset() * -60;
- t = t - timezoneOffset;
-
- date = new Date(parseInt(t) * parseInt(1000));
- var str = date.getFullYear() + "-";
- if (parseInt(date.getMonth()) < 9)
- str += "0";
- str += (parseInt(date.getMonth())+1) + "-";
- if (date.getDate() < 10)
- str += "0";
- str += date.getDate() + "T";
- if (date.getHours() < 10)
- str += "0";
- str += date.getHours() + ":";
- if (date.getMinutes() < 10)
- str += "0";
- str += date.getMinutes() + ":";
- if (date.getSeconds() < 10)
- str += "0";
- str += date.getSeconds();
-
- return str;
-}
-
-function localEpochToString(t) {
- var d = new Date(parseInt(t) * parseInt(1000));
- var timezoneOffset = d.getTimezoneOffset() * -60;
- t = t + timezoneOffset;
-
- return epochToString(t);
-}
-
-/*
- * Start replaying historical data.
- */
-nms.playback.startReplay = function(startTime,stopTime) {
- if(!startTime || !stopTime)
- return false;
-
- nms.playback.pause();
- nms.playback.startTime = stringToEpoch(startTime);
- nms.playback.stopTime = stringToEpoch(stopTime);
- nms.now = epochToString(nms.playback.startTime);
- nms.playback.play();
-};
-
-/*
- * Pause playback
- */
-nms.playback.pause = function() {
- nms.timers.playback.stop();
- nms.playback.playing = false;
-};
-
-/*
- * Start playback
- */
-nms.playback.play = function() {
- nms.playback.tick();
- nms.timers.playback.start();
- nms.playback.playing = true;
-};
-
-/*
- * Toggle playback
- */
-nms.playback.toggle = function() {
- if(nms.playback.playing) {
- nms.playback.pause();
- } else {
- nms.playback.play();
- }
-};
-
-/*
- * Jump to place in time
- */
-nms.playback.setNow = function(now) {
- nms.now = parseNow(now);
-
- nms.playback.stopTime = false;
- nms.playback.startTime = false;
- nms.playback.tick();
-};
-
-/*
- * Step forwards or backwards in timer
- */
-nms.playback.stepTime = function(n)
-{
- var now = getNowEpoch();
- var newtime = parseInt(now) + parseInt(n);
- nms.now = epochToString(parseInt(newtime));
-
- if(!nms.playback.playing)
- nms.playback.tick();
-};
-
-/*
- * Ticker to trigger updates, and advance time if replaying
- *
- * This is run on a timer (nms.timers.tick) every second while unpaused
- */
-nms.playback.tick = function()
-{
- nms.playback.replayTime = getNowEpoch();
-
- // If outside start-/stopTime, remove limits and pause playback
- if (nms.playback.stopTime && (nms.playback.replayTime >= nms.playback.stopTime || nms.playback.replayTime < nms.playback.startTime)) {
- nms.playback.stopTime = false;
- nms.playback.startTime = false;
- nms.playback.pause();
- return;
- }
-
- // If past actual datetime, go live
- if (nms.playback.replayTime > parseInt(Date.now() / 1000)) {
- nms.now = false;
- }
-
- // If we are still replaying, advance time
- if(nms.now !== false && nms.playback.playing) {
- nms.playback.stepTime(nms.playback.replayIncrement);
- }
-};
-
-/*
- * Helper function for safely getting a valid now-epoch
- */
-function getNowEpoch() {
- if (nms.now && nms.now != 0)
- return stringToEpoch(nms.now);
- else
- return parseInt(Date.now() / 1000);
-}
-
-/*
- * There are 4 legend-bars. This is a helper-function to set the color and
- * description/name for each one. Used from handler init-functions.
- *
- * FIXME: Should be smarter, possibly use a canvas-writer so we can get
- * proper text (e.g.: not black text on dark blue).
- */
-function setLegend(x,color,name)
-{
- var el = document.getElementById("legend-" + x);
- el.style.background = color;
- el.title = name;
- el.textContent = name;
-}
-
-/*
- * Change map handler (e.g., change from uplink map to ping map)
- */
-function setUpdater(fo)
-{
- nmsMap.reset();
- nmsData.unregisterHandlerWildcard("mapHandler");
- try {
- fo.init();
- } catch (e) {
- /*
- * This can happen typically on initial load where the data
- * hasn't been retrieved yet. Instead of breaking the
- * entire init-process, just bail out here.
- */
- console.log("Possibly broken handler: " + fo.name);
- console.log(e);
- }
- var foo = document.getElementById("updater_name");
- foo.innerHTML = fo.name + " ";
- document.location.hash = fo.tag;
-}
-
-function toggleLayer(layer) {
- var l = document.getElementById(layer);
- if (l.style.display == 'none')
- l.style.display = '';
- else
- l.style.display = 'none';
-}
-
-function toggleConnect() {
- toggleLayer("linkCanvas");
-}
-
-function commentInactive(id)
-{
- commentChange(id,"inactive");
-}
-
-function commentPersist(id)
-{
- commentChange(id,"persist");
-}
-
-function commentDelete(id)
-{
- var r = confirm("Really delete comment? (Delted comments are still stored in the database, but never displayed)");
- if (r == true) {
- commentChange(id,"delete");
- }
-}
-
-/*
- * FIXME: Neither of these two handle failures in any way, shape or form.
- * Nor do they really give user-feedback. They work, but only by magic.
- */
-function commentChange(id,state)
-{
- var myData = {
- comment:id,
- state:state
- };
- myData = JSON.stringify(myData);
- $.ajax({
- type: "POST",
- url: "/api/write/comment-change",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("comments");
- }
- });
-}
-
-function addComment(sw,comment)
-{
- var myData = {
- switch:sw,
- comment:comment
- };
- myData = JSON.stringify(myData);
- $.ajax({
- type: "POST",
- url: "/api/write/comment-add",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("comments");
- }
- });
-}
-
-
-
-/*
- * Returns true if the coordinates (x,y) is inside the box defined by
- * box.{x,y,w.h} (e.g.: placement of a switch).
- */
-function isIn(box, x, y)
-{
- return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height)));
-}
-
-/*
- * Return the name of the switch found at coordinates (x,y), or 'undefined'
- * if none is found.
- */
-function findSwitch(x,y) {
- x = parseInt(parseInt(x) / nmsMap.scale);
- y = parseInt(parseInt(y) / nmsMap.scale);
-
- for (var v in nmsData.switches.switches) {
- if(isIn(nmsData.switches.switches[v]['placement'],x,y)) {
- return v;
- }
- }
- return undefined;
-}
-
-/*
- * Set night mode to whatever 'toggle' is.
- *
- * Changes background and nav-bar, then leaves the rest to nmsMap.
- */
-function setNightMode(toggle) {
- nms.nightMode = toggle;
- var body = document.getElementById("body");
- body.style.background = toggle ? "black" : "white";
- var nav = document.getElementsByTagName("nav")[0];
- if (toggle) {
- nav.classList.add('navbar-inverse');
- } else {
- nav.classList.remove('navbar-inverse');
- }
- nmsMap.setNightMode(toggle);
-}
-
-/*
- * Boot up "fully fledged" NMS.
- *
- * This can be re-written to provide different looks and feels but using
- * the same framework. Or rather: that's the goal. We're not quite there
- * yet.
- */
-function initNMS() {
- nms.timers.playback = new nmsTimer(nms.playback.tick, 1000, "Playback ticker", "Handler used to advance time");
-
- // Public
- nmsData.registerSource("ping", "/api/public/ping");
- nmsData.registerSource("switches","/api/public/switches");
- nmsData.registerSource("switchstate","/api/public/switch-state");
- nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary");
- nmsData.registerSource("dhcp","/api/public/dhcp");
-
- // This is a magic dummy-source, it's purpose is to give a unified
- // way to get ticks every second. It is mainly meant to allow map
- // handlers to register for ticks so they will execute without data
- // (and thus notice stale data instead of showing a green ping-map
- // despite no pings)
- nmsData.registerSource("ticker","bananabananbanana");
-
- restoreSettings();
- nmsMap.init();
- detectHandler();
- nms.playback.play();
- setupKeyhandler();
- setupSearchKeyHandler();
-}
-
-function detectHandler() {
- for (var i in handlers) {
- if (('#' + handlers[i].tag) == document.location.hash) {
- setUpdater(handlers[i]);
- return;
- }
- }
- setUpdater(handler_ping);
-}
-
-function setMenu()
-{
- var nav = document.getElementsByTagName("nav")[0];
- nav.style.display = nms.menuShowing ? '' : 'none';
-}
-
-function toggleMenu()
-{
- nms.menuShowing = ! nms.menuShowing;
- setMenu();
- saveSettings();
-}
-function hideWindow(e,key)
-{
- nmsInfoBox.hide();
-}
-function toggleHelp(e,key) {
- toggleLayer('aboutKeybindings');
-}
-
-function setMapModeFromN(e,key)
-{
- switch(key) {
- case '1':
- setUpdater(handler_ping);
- break;
- case '2':
- setUpdater(handler_uplinks);
- break;
- case '3':
- setUpdater(handler_dhcp);
- break;
- case '4':
- setUpdater(handler_comment);
- break;
- case '5':
- setUpdater(handler_temp);
- break;
- case '6':
- setUpdater(handler_traffic);
- break;
- case '7':
- setUpdater(handler_traffic_tot);
- break;
- case '8':
- setUpdater(handler_snmp);
- break;
- case '9':
- setUpdater(handler_disco);
- break;
- }
- return true;
-}
-
-function moveTimeFromKey(e,key)
-{
- switch(key) {
- case 'h':
- nms.playback.stepTime(-3600);
- break;
- case 'j':
- nms.playback.stepTime(-300);
- break;
- case 'k':
- nms.playback.stepTime(300);
- break;
- case 'l':
- nms.playback.stepTime(3600);
- break;
- case 'p':
- nms.playback.toggle();
- break;
- case 'r':
- nms.playback.setNow();
- nms.playback.play();
- break;
- }
- return true;
-}
-
-function keyPressed(e)
-{
- if (e.target.nodeName == "INPUT") {
- return false;
- }
- if(e.key) {
- var key = e.key;
- } else {
- var key = e.keyCode;
- switch(key) {
- case 187:
- key = '?';
- break;
- case 189:
- key = '-';
- break;
- case 27:
- key = 'Escape';
- break;
- default:
- key = String.fromCharCode(key);
- key = key.toLowerCase();
- break;
- }
- }
- if (nms.keyBindings[key])
- return nms.keyBindings[key](e,key);
- if (nms.keyBindings['default'])
- return nms.keyBindings['default'](e,key);
- return false;
-}
-
-function setupKeyhandler()
-{
- var b = document.getElementsByTagName("body")[0];
- $( "body" ).keyup(function(e) {
- keyPressed(e);
- });
-}
-
-function setupSearchKeyHandler()
-{
- $("#searchbox").keyup(function(e) {
- nmsInfoBox._searchKeyListener(e);
- });
-}
-
-
-function getCookie(cname) {
- var name = cname + "=";
- var ca = document.cookie.split(';');
- for(var i=0; i<ca.length; i++) {
- var c = ca[i];
- while (c.charAt(0)==' ')
- c = c.substring(1);
- if (c.indexOf(name) == 0)
- return c.substring(name.length,c.length);
- }
- return "";
-}
-
-function saveSettings()
-{
- var foo={};
- for ( var v in nms.settingsList ) {
- foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ];
- }
- document.cookie = 'nms='+btoa(JSON.stringify(foo));
-}
-
-function restoreSettings()
-{
- try {
- var retrieve = JSON.parse(atob(getCookie("nms")));
- } catch(e) {
- console.log("nothing saved");
- }
-
- for (var v in retrieve) {
- nms[v] = retrieve[v];
- }
- setMenu();
-}
-
-/*
- * Time travel gui
- */
-function startNowPicker(now) {
- $.datetimepicker.setLocale('no');
- $('#nowPicker').datetimepicker('destroy');
- if(!now && nms.now)
- now = nms.now;
- var datepicker = $('#nowPicker').datetimepicker({
- value: now,
- mask:false,
- inline:true,
- todayButton: false,
- validateOnBlur:false,
- dayOfWeekStart:1,
- maxDate:'+1970/01/01',
- onSelectDate: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- },
- onSelectTime: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- },
- onGenerate: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- }
- });
-}
diff --git a/web/nms-public.gathering.org/js/npm.js b/web/nms-public.gathering.org/js/npm.js
deleted file mode 100644
index bf6aa80..0000000
--- a/web/nms-public.gathering.org/js/npm.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
-require('../../js/transition.js')
-require('../../js/alert.js')
-require('../../js/button.js')
-require('../../js/carousel.js')
-require('../../js/collapse.js')
-require('../../js/dropdown.js')
-require('../../js/modal.js')
-require('../../js/tooltip.js')
-require('../../js/popover.js')
-require('../../js/scrollspy.js')
-require('../../js/tab.js')
-require('../../js/affix.js') \ No newline at end of file
diff --git a/web/nms.gathering.org/api/API.rst b/web/nms.gathering.org/api/API.rst
deleted file mode 100644
index 7d5c88b..0000000
--- a/web/nms.gathering.org/api/API.rst
+++ /dev/null
@@ -1,131 +0,0 @@
-API-dok
-=======
-
-Work in progress.
-
-There are two relevant paths: /api/public and /api/private. One requires
-user-login in, the other does not.
-
-General: All end-points that output time-based data accept the "now=<time>"
-argument, where, <time> is YYYY-MM-DDThh:mm:ss. E.g:
-
-GET /api/public/switch-state?now=2015-04-02T15:00:00
-
-There is no guarantee that the data is exact time-wise, thus each endpoint
-should also output relevant time stamps.
-
-Currently error handling sucks.
-
-This document is in no way complete, but it's a start. It will be updated
-as time permits and API's stabilize.
-
-Public
-......
-
-Use URL https://nms-public.tg16.gathering.org/api/public
-
-/api/public/dhcp
-----------------
-
-Methods: GET
-Update frequency: every second or so.
-
-Used to report time since last dhcp lease.
-
-/api/public/dhcp-summary
-------------------------
-
-Methods: GET
-Update frequency: every second or so.
-
-Used to report dhcp lease stats. Both recent stats, and total stats.
-
-/api/public/ping
-----------------
-
-Methods: GET
-Update frequency: every second or so.
-
-Used to report linknet latency.
-
-The switch latency is being integrated into switch-state.pl and linknet
-latency will similarly be moved.
-
-/api/public/switches
---------------------
-
-Methods: GET
-Update frequency: Infrequent (on topology/config changes)
-
-List all switches and map positions.
-
-Used to draw switches on a map and provide static information.
-
-/api/public/switch-state
-------------------------
-
-Methods: GET
-Update frequency: Every second
-
-Provides state for each switch, including total port speed, uplink port
-speed, latency and temperature.
-
-
-Private
-.......
-
-/api/private/comment-add
-------------------------
-
-Methods: POST
-
-Add a comment
-
-/api/private/comment-change
----------------------------
-
-Methods: POST
-
-Note that comments are never really deleted, but the state can be set to
-deleted, making sure they are never shown.
-
-/api/private/comments
----------------------
-
-Methods: GET
-
-Update frequency: on user input
-
-Lists comments.
-
-/api/private/snmp
------------------
-
-Methods: GET
-
-Update frequency: Every few seconds, based on SNMP data.
-
-Returns full SNMP-data, split into two trees. 'misc' and 'ports'.
-
-
-/api/private/switches-management
---------------------------------
-
-Methods: GET
-
-Update frequency: Infrequent (on topology/config changes)
-
-List management information for switches.
-
-/api/private/switch-add
------------------------
-
-Methods: POST
-
-Add or update switches, supports same format as tools/add_switches.txt.pl
-
-Accepts an array of switches.
-
-Magic: If you set placement to be "reset", it will re-calculate placement
-based on sysname. For new switches, this is redundant as an empty
-placement-field will trigger the same behavior.
diff --git a/web/nms.gathering.org/api/public/dhcp b/web/nms.gathering.org/api/public/dhcp
deleted file mode 100755
index 7b048d1..0000000
--- a/web/nms.gathering.org/api/public/dhcp
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web qw (%json finalize_output);
-use strict;
-use warnings;
-use Data::Dumper;
-
-nms::web::setwhen('60m');
-my $q = $nms::web::dbh->prepare('select distinct on (sysname) extract(epoch from date_trunc(\'second\',time)) as time,sysname from dhcp join switches on dhcp.switch = switches.switch where ' . $nms::web::when . ' order by sysname,time desc;');
-$q->execute();
-while ( my $ref = $q->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
- $json{'dhcp'}{$ref->{'sysname'}} = $ref->{'time'};
-}
-
-$nms::web::cc{'max-age'} = "10";
-$nms::web::cc{'stale-while-revalidate'} = "30";
-finalize_output();
diff --git a/web/nms.gathering.org/api/public/dhcp-summary b/web/nms.gathering.org/api/public/dhcp-summary
deleted file mode 100755
index a0e5609..0000000
--- a/web/nms.gathering.org/api/public/dhcp-summary
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /usr/bin/perl
-use lib '../../../../include';
-use strict;
-use warnings;
-use nms::web;
-
-nms::web::setwhen('2h');
-
-my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;");
-$q2->execute();
-while (my $ref = $q2->fetchrow_hashref()) {
- $nms::web::json{'dhcp'} = $ref;
-}
-$nms::web::cc{'max-age'} = "10";
-$nms::web::cc{'stale-while-revalidate'} = "15";
-finalize_output();
diff --git a/web/nms.gathering.org/api/public/location b/web/nms.gathering.org/api/public/location
deleted file mode 100755
index b940007..0000000
--- a/web/nms.gathering.org/api/public/location
+++ /dev/null
@@ -1,44 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web;
-use strict;
-use warnings;
-use Data::Dumper;
-
-#my $query = $nms::web::dbh->prepare("select * from switches where '185.110.150.7' << subnet4");
-my $query = $nms::web::dbh->prepare("select * from switches where ? << subnet4 or ? << subnet6");
-
-print "Cache-Control: max-age=0";
-print "Content-Type: text/html";
-print "\n\n";
-
-# get user ip from somewhere.
-# HTTP_X_FORWARDED_FOR is set by varnish. When using varnish, the REMOTE_ADDR will always be localhost.
-
-my @xff = split(",",$ENV{HTTP_X_FORWARDED_FOR});
-my $addr = $xff[0] // $ENV{REMOTE_ADDR};
-
-$query->execute($addr,$addr);
-
-# add start html: header + body etc.
-print "
-<html>
- <body style=\"text-align: center; font-size: 50pt;\">
-";
-
-# print address
-print "" . $addr ."<br \>";
-
-# print switch name and distroname.
-while ( my $ref = $query->fetchrow_hashref() ) {
- print $ref->{sysname}. " @ " . $ref->{distro};
- print "<br />";
-}
-
-# add end html
-print "
- </body>
-</html>
-";
diff --git a/web/nms.gathering.org/api/public/ping b/web/nms.gathering.org/api/public/ping
deleted file mode 100755
index 811708d..0000000
--- a/web/nms.gathering.org/api/public/ping
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /usr/bin/perl
-use lib '../../../../include';
-use strict;
-use warnings;
-use nms::web;
-
-nms::web::setwhen('15s');
-
-my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (" . $nms::web::now . " - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where "
- . $nms::web::when . " group by switch)");
-
-$q->execute();
-while (my $ref = $q->fetchrow_hashref()) {
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'};
- # Get seconds, without decimlas, from timestamp.
- # '00:01:01.435601' => 61 seconds.
- my ( $h, $m, $s ) = split( ':|\.', $ref->{'age'} );
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s; # $$ref->{'age'};
-}
-
-my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE "
- . $nms::web::when . " ORDER BY switch, time DESC;");
-$qs->execute();
-while ( my $ref = $qs->fetchrow_hashref() ) {
- $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'};
-}
-
-my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE "
- . $nms::web::when . " ORDER BY linknet, time DESC;");
-$lq->execute();
-while ( my $ref = $lq->fetchrow_hashref() ) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ];
-}
-
-$nms::web::cc{'max-age'} = "1";
-$nms::web::cc{'stale-while-revalidate'} = "15";
-finalize_output();
diff --git a/web/nms.gathering.org/api/public/switch-state b/web/nms.gathering.org/api/public/switch-state
deleted file mode 100755
index a6caea9..0000000
--- a/web/nms.gathering.org/api/public/switch-state
+++ /dev/null
@@ -1,97 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web qw (%json finalize_output);
-use strict;
-use warnings;
-use Data::Dumper;
-
-my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
- . $nms::web::when . 'group by switch);');
-
-$q->execute();
-while ( my $ref = $q->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
-
- my %data = %{JSON::XS::decode_json($ref->{'data'})};
-
- for my $porti (keys %{$data{'ports'}}) {
- my %port = %{$data{'ports'}{$porti}};
- my $smallport = $porti;
- if ($porti =~ m/\.0$/) {
- next;
- }
- if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
- $smallport =~ s/[0-9-].*$//;
- } else {
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
- }
- if ($porti =~ /ge-0\/0\/4[4-7]$/) {
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{'uplinks'}{'live'} += 1;
- }
- $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
- }
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- $json{'switches'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{ifs}{$smallport}{'live'} += 1;
- $json{'switches'}{$sysname}{totals}{'live'} += 1;
- }
- $json{'switches'}{$sysname}{totals}{'total'} += 1;
- }
- $json{'switches'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'};
- $json{'switches'}{$sysname}{'time'} = $ref->{'time'};
-}
-
-nms::web::setwhen('15m','10m');
-my $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
- . $nms::web::when . 'group by switch);');
-
-$q2->execute();
-while ( my $ref = $q2->fetchrow_hashref() ) {
- my $sysname = $ref->{'sysname'};
-
- my %data = %{JSON::XS::decode_json($ref->{'data'})};
-
- for my $porti (keys %{$data{'ports'}}) {
- my %port = %{$data{'ports'}{$porti}};
- my $smallport = $porti;
- if ($porti =~ m/\.0$/) {
- next;
- }
- if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
- $smallport =~ s/[0-9-].*$//;
- } else {
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
- }
- if ($porti =~ /ge-0\/0\/4[4-7]$/) {
- $json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'then'}{$sysname}{'uplinks'}{'live'} += 1;
- }
- $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
- }
-
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- $json{'then'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'then'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
- if ($port{'ifOperStatus'} eq "up") {
- $json{'then'}{$sysname}{ifs}{$smallport}{'live'} += 1;
- $json{'then'}{$sysname}{totals}{'live'} += 1;
- }
- $json{'then'}{$sysname}{totals}{'total'} += 1;
- }
- $json{'then'}{$sysname}{'temp'} = $data{'misc'}{'enterprises.2636.3.1.13.1.7.7.1.0.0'}{''};
- $json{'then'}{$sysname}{'time'} = $ref->{'time'};
-}
-$nms::web::cc{'max-age'} = "5";
-$nms::web::cc{'stale-while-revalidate'} = "30";
-finalize_output();
diff --git a/web/nms.gathering.org/api/public/switches b/web/nms.gathering.org/api/public/switches
deleted file mode 100755
index 890b7d7..0000000
--- a/web/nms.gathering.org/api/public/switches
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web;
-use strict;
-use warnings;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "60";
-
-my $q2 = $nms::web::dbh->prepare('select switch,sysname,distro_name,placement,mgmt_v4_addr,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,community,last_updated,switchtype from switches where placement is not null');
-
-$q2->execute();
-while (my $ref = $q2->fetchrow_hashref()) {
- $ref->{'placement'} =~ /\((-?\d+),(-?\d+)\),\((-?\d+),(-?\d+)\)/;
- my ($x1, $y1, $x2, $y2) = ($1, $2, $3, $4);
- my $sysname = $ref->{'sysname'};
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'x'} = $x2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'y'} = $y2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'width'} = $x1 - $x2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'height'} = $y1 - $y2;
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'distro_name'} = $ref->{'distro_name'};
-}
-
-my $q4 = $nms::web::dbh->prepare('select linknet, (select sysname from switches where switch = switch1) as sysname1, (select sysname from switches where switch = switch2) as sysname2 from linknets');
-
-$q4->execute();
-while (my $ref = $q4->fetchrow_hashref()) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = $ref;
-}
-
-finalize_output();
diff --git a/web/nms.gathering.org/api/read/comments b/web/nms.gathering.org/api/read/comments
deleted file mode 100755
index 4adfb2b..0000000
--- a/web/nms.gathering.org/api/read/comments
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use lib '../../../../include';
-use nms::web;
-use strict;
-use warnings;
-
-my $query = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,state,username,id,comment from switch_comments natural join switches where state != \'delete\' order by time desc');
-$query->execute();
-while (my $ref = $query->fetchrow_hashref()) {
- push @{$nms::web::json{'comments'}{$ref->{'sysname'}}{'comments'}},$ref;
-}
-
-nms::web::finalize_output();
diff --git a/web/nms.gathering.org/api/read/snmp b/web/nms.gathering.org/api/read/snmp
deleted file mode 100755
index f69ca62..0000000
--- a/web/nms.gathering.org/api/read/snmp
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web;
-use strict;
-use warnings;
-use JSON;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "10";
-
-my $q = $nms::web::dbh->prepare('select sysname,data from snmp natural join switches where id in (select max(id) from snmp where '
- . $nms::web::when . 'group by switch);');
-
-$q->execute();
-while (my $ref = $q->fetchrow_hashref()) {
- my $sysname = $ref->{'sysname'};
-
- # This is, strictly speaking, redundant. But by doing this, we can
- # re-use the standard methods of finalize_output() and whatnot.
- my $data = JSON::XS::decode_json($ref->{'data'});
-
- $nms::web::json{'snmp'}{$ref->{'sysname'}} = $data;
-}
-
-finalize_output();
diff --git a/web/nms.gathering.org/api/read/switches-management b/web/nms.gathering.org/api/read/switches-management
deleted file mode 100755
index 4461a90..0000000
--- a/web/nms.gathering.org/api/read/switches-management
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web;
-use strict;
-use warnings;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "60";
-
-my $q2 = $nms::web::dbh->prepare('select switch,sysname,mgmt_v4_addr,subnet4,subnet6,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,last_updated,distro_phy_port from switches where placement is not null');
-
-$q2->execute();
-while (my $ref = $q2->fetchrow_hashref()) {
- my $sysname = $ref->{'sysname'};
- $nms::web::json{'switches'}{$ref->{'sysname'}} = $ref;
-}
-
-my $q4 = $nms::web::dbh->prepare('select linknet, (select sysname from switches where switch = switch1) as sysname1, addr1, (select sysname from switches where switch = switch2) as sysname2,addr2 from linknets');
-
-$q4->execute();
-while (my $ref = $q4->fetchrow_hashref()) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = $ref;
-}
-
-finalize_output();
diff --git a/web/nms.gathering.org/api/write/comment-add b/web/nms.gathering.org/api/write/comment-add
deleted file mode 100755
index bcea6dc..0000000
--- a/web/nms.gathering.org/api/write/comment-add
+++ /dev/null
@@ -1,24 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-use lib '../../../../include';
-use utf8;
-use nms::web qw($dbh db_safe_quote get_input finalize_output);
-use strict;
-use warnings;
-
-my $in = get_input();
-my %tmp = %{JSON::XS::decode_json($in)};
-
-my $data = $dbh->quote($tmp{'comment'});
-my $switch = $dbh->quote($tmp{'switch'});
-my $user = $dbh->quote($ENV{'REMOTE_USER'} || "undefined");
-
-my $q = $nms::web::dbh->prepare("INSERT INTO switch_comments (time,username,switch,comment) values (now(),$user,(select switch from switches where sysname = $switch limit 1),$data)");
-$q->execute();
-
-$nms::web::cc{'max-age'} = '0';
-$nms::web::cc{'stale-while-revalidate'} = '0';
-$nms::web::json{'state'} = 'ok';
-
-print "X-ban: /api/read/comments\n";
-finalize_output();
diff --git a/web/nms.gathering.org/api/write/comment-change b/web/nms.gathering.org/api/write/comment-change
deleted file mode 100755
index 0bdabc0..0000000
--- a/web/nms.gathering.org/api/write/comment-change
+++ /dev/null
@@ -1,25 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-use lib '../../../../include';
-use utf8;
-use nms;
-use nms::web qw($dbh db_safe_quote get_input finalize_output);
-
-use strict;
-use warnings;
-
-my $in = get_input();
-my %tmp = %{JSON::XS::decode_json($in)};
-
-my $id = $dbh->quote($tmp{'comment'});
-my $state = $dbh->quote($tmp{'state'});
-
-my $q = $nms::web::dbh->prepare("UPDATE switch_comments SET state = " . $state . " WHERE id = " . $id . ";");
-$q->execute();
-
-$nms::web::cc{'max-age'} = '0';
-$nms::web::cc{'stale-while-revalidate'} = '0';
-$nms::web::json{'state'} = 'ok';
-
-print "X-ban: /api/read/comments\n";
-finalize_output();
diff --git a/web/nms.gathering.org/api/write/switch-add b/web/nms.gathering.org/api/write/switch-add
deleted file mode 100755
index 0051111..0000000
--- a/web/nms.gathering.org/api/write/switch-add
+++ /dev/null
@@ -1,92 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-#use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web qw(%get_params %json finalize_output get_input $dbh);
-use nms::util qw(guess_placement);
-use strict;
-use warnings;
-use JSON;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "0";
-
-my $in = get_input();
-my @tmp = @{JSON::XS::decode_json($in)};
-
-my @added;
-my @dups;
-
-my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?");
-
-my @fields = ( 'community', 'current_mac', 'distro_name', 'distro_phy_port', 'lldp_chassis_id', 'mgmt_v4_addr', 'mgmt_v4_gw', 'mgmt_v6_addr', 'mgmt_v6_gw', 'mgmt_vlan', 'placement', 'poll_frequency', 'subnet4', 'subnet6', 'switchtype', 'sysname', 'traffic_vlan');
-
-sub convertplace
-{
- my %in = %{$_[0]};
- my %out = ();
-
- if (not defined $in{'x1'} and defined($in{'x'})) {
- $out{'x1'} = int($in{'x'});
- $out{'y1'} = int($in{'y'});
- $out{'xx'} = int($in{'x'} + $in{'width'});
- $out{'yy'} = int($in{'y'} + $in{'height'});
- } else {
- return \%in;
- }
- return \%out;
-}
-
-foreach my $tmp2 (@tmp) {
- my %switch = %{$tmp2};
- my $affected = 0;
- my %template = ();
- map { $template{$_} = 'DEFAULT' } @fields;
- if (not defined($switch{'sysname'})) {
- next;
- }
-
- $sth->execute( $switch{'sysname'});
- while ( my @row = $sth->fetchrow_array ) {
- $affected += 1;
- }
-
- if ($affected == 0) {
- my %placement;
- if (not defined ($switch{'placement'})) {
- %placement = guess_placement($switch{'sysname'});
- } else {
- %placement = %{convertplace($switch{'placement'})};
- }
- if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) {
- $switch{'ip'} = $switch{'mgtmt4'};
- }
- if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) {
- $switch{'secondary_ip'} = $switch{'mgtmt6'};
- }
- my ($x1,$x2,$y1,$y2);
- $x1 = $placement{'x1'};
- $y1 = $placement{'y1'};
- $x2 = $placement{'xx'};
- $y2 = $placement{'yy'};
- $switch{'placement'} = "(($x1,$y1),($x2,$y2))";
-
- map {
- if (defined ($template{$_})) {
- $template{$_} = $dbh->quote($switch{$_});
- }
- } keys %switch;
-
-
- $nms::web::dbh->do("INSERT INTO SWITCHES (mgmt_v4_addr, sysname, poll_frequency, community, lldp_chassis_id, mgmt_v6_addr, placement,subnet4,subnet6,distro_name) VALUES ($template{'mgmt_v4_addr'}, $template{'sysname'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'mgmt_v6_addr'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro_name'});");
- push @added, $switch{'sysname'};
- }
-}
-
-$json{'switches_addded'} = \@added;
-
-print "X-ban: /api/.*switches.*\n";
-finalize_output();
diff --git a/web/nms.gathering.org/api/write/switch-update b/web/nms.gathering.org/api/write/switch-update
deleted file mode 100755
index 14c8773..0000000
--- a/web/nms.gathering.org/api/write/switch-update
+++ /dev/null
@@ -1,123 +0,0 @@
-#! /usr/bin/perl
-# vim:ts=8:sw=8
-
-#use CGI qw(fatalsToBrowser);
-use DBI;
-use lib '../../../../include';
-use nms;
-use nms::web qw(%get_params %json finalize_output get_input $dbh);
-use nms::util qw(guess_placement);
-use strict;
-use warnings;
-use JSON;
-use Data::Dumper;
-
-$nms::web::cc{'max-age'} = "0";
-
-my $in = get_input();
-my @tmp = @{JSON::XS::decode_json($in)};
-
-my @added;
-my @dups;
-
-my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?");
-
-
-my @fields = ( 'community', 'current_mac', 'distro_name', 'distro_phy_port', 'lldp_chassis_id', 'mgmt_v4_addr', 'mgmt_v4_gw', 'mgmt_v4_netsize', 'mgmt_v6_addr', 'mgmt_v6_gw', 'mgmt_v6_netsize', 'mgmt_vlan', 'placement', 'poll_frequency', 'subnet4', 'subnet6', 'switchtype', 'sysname', 'traffic_vlan');
-
-sub convertplace
-{
- my %in = %{$_[0]};
- my %out = ();
-
- if (not defined $in{'x1'} and defined($in{'x'})) {
- $out{'x1'} = int($in{'x'});
- $out{'y1'} = int($in{'y'});
- $out{'xx'} = int($in{'x'} + $in{'width'});
- $out{'yy'} = int($in{'y'} + $in{'height'});
- } else {
- return \%in;
- }
- return \%out;
-}
-
-foreach my $tmp2 (@tmp) {
- my %switch = %{$tmp2};
- my $affected = 0;
- my %template = ();
- map { $template{$_} = 'DEFAULT' } @fields;
- if (not defined($switch{'sysname'})) {
- next;
- }
-
- $sth->execute( $switch{'sysname'});
- while ( my @row = $sth->fetchrow_array ) {
- $affected += 1;
- }
-
- if ($affected == 0) {
- my %placement;
- if (not defined ($switch{'placement'})) {
- %placement = guess_placement($switch{'sysname'});
- } else {
- %placement = %{convertplace($switch{'placement'})};
- }
- if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) {
- $switch{'ip'} = $switch{'mgtmt4'};
- }
- if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) {
- $switch{'secondary_ip'} = $switch{'mgtmt6'};
- }
- my ($x1,$x2,$y1,$y2);
- $x1 = $placement{'x1'};
- $y1 = $placement{'y1'};
- $x2 = $placement{'xx'};
- $y2 = $placement{'yy'};
- $switch{'placement'} = "(($x1,$y1),($x2,$y2))";
-
- map {
- if (defined ($template{$_})) {
- $template{$_} = $dbh->quote($switch{$_});
- }
- } keys %switch;
-
-
- $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement,subnet4,subnet6,distro) VALUES ($template{'ip'}, $template{'sysname'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro'});");
- push @added, $switch{'sysname'};
- } else {
- if (defined($switch{'placement'})) {
- my %placement;
- if ($switch{'placement'} eq "reset") {
- %placement = guess_placement($switch{'sysname'});
- } else {
- %placement = %{convertplace($switch{'placement'})};
- }
- my ($x1,$x2,$y1,$y2);
- $x1 = $placement{'x1'};
- $y1 = $placement{'y1'};
- $x2 = $placement{'xx'};
- $y2 = $placement{'yy'};
- $switch{'placement'} = "(($x1,$y1),($x2,$y2))";
- push @dups, "not really, but: " . $switch{'placement'};
- }
- if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) {
- $switch{'ip'} = $switch{'mgtmt4'};
- }
- if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) {
- $switch{'secondary_ip'} = $switch{'mgtmt6'};
- }
- my @set;
- map {
- if (defined($template{$_})) {
- push @set, "$_=" . $dbh->quote($switch{$_});
- }
- } keys %switch;
- $nms::web::dbh->do("UPDATE SWITCHES SET " . join(", ", @set) . "WHERE sysname=" . $dbh->quote($switch{'sysname'}) . ";");
- push @dups, $switch{'sysname'};
- }
-}
-$json{'switches_addded'} = \@added;
-$json{'switches_updated'} = \@dups;
-
-print "X-ban: /api/.*switches.*\n";
-finalize_output();
diff --git a/web/nms.gathering.org/css/bootstrap-theme.css b/web/nms.gathering.org/css/bootstrap-theme.css
deleted file mode 100644
index b0fdfcb..0000000
--- a/web/nms.gathering.org/css/bootstrap-theme.css
+++ /dev/null
@@ -1,476 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-default .badge,
-.btn-primary .badge,
-.btn-success .badge,
-.btn-info .badge,
-.btn-warning .badge,
-.btn-danger .badge {
- text-shadow: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
-}
-.btn-default {
- text-shadow: 0 1px 0 #fff;
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #dbdbdb;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
- background-color: #e0e0e0;
- background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
- background-color: #e0e0e0;
- border-color: #dbdbdb;
-}
-.btn-default.disabled,
-.btn-default:disabled,
-.btn-default[disabled] {
- background-color: #e0e0e0;
- background-image: none;
-}
-.btn-primary {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
- background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #245580;
-}
-.btn-primary:hover,
-.btn-primary:focus {
- background-color: #265a88;
- background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #265a88;
- border-color: #245580;
-}
-.btn-primary.disabled,
-.btn-primary:disabled,
-.btn-primary[disabled] {
- background-color: #265a88;
- background-image: none;
-}
-.btn-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
- background-color: #419641;
- background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #419641;
- border-color: #3e8f3e;
-}
-.btn-success.disabled,
-.btn-success:disabled,
-.btn-success[disabled] {
- background-color: #419641;
- background-image: none;
-}
-.btn-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
- background-color: #2aabd2;
- background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #2aabd2;
- border-color: #28a4c9;
-}
-.btn-info.disabled,
-.btn-info:disabled,
-.btn-info[disabled] {
- background-color: #2aabd2;
- background-image: none;
-}
-.btn-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
- background-color: #eb9316;
- background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #eb9316;
- border-color: #e38d13;
-}
-.btn-warning.disabled,
-.btn-warning:disabled,
-.btn-warning[disabled] {
- background-color: #eb9316;
- background-image: none;
-}
-.btn-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
- background-color: #c12e2a;
- background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #c12e2a;
- border-color: #b92c28;
-}
-.btn-danger.disabled,
-.btn-danger:disabled,
-.btn-danger[disabled] {
- background-color: #c12e2a;
- background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- background-color: #e8e8e8;
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- background-color: #2e6da4;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
-}
-.navbar-default {
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
- background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
- background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- border-radius: 0;
-}
-@media (max-width: 767px) {
- .navbar .navbar-nav .open .dropdown-menu > .active > a,
- .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
- }
-}
-.alert {
- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
- background-repeat: repeat-x;
- border-color: #b2dba1;
-}
-.alert-info {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #9acfea;
-}
-.alert-warning {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #f5e79e;
-}
-.alert-danger {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dca7a7;
-}
-.progress {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
- background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
- background-repeat: repeat-x;
-}
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- text-shadow: 0 -1px 0 #286090;
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
- background-repeat: repeat-x;
- border-color: #2b669a;
-}
-.list-group-item.active .badge,
-.list-group-item.active:hover .badge,
-.list-group-item.active:focus .badge {
- text-shadow: none;
-}
-.panel {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
- background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
- background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
- background-repeat: repeat-x;
-}
-.well {
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dcdcdc;
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/web/nms.gathering.org/css/bootstrap-theme.css.map b/web/nms.gathering.org/css/bootstrap-theme.css.map
deleted file mode 100644
index 5a12d63..0000000
--- a/web/nms.gathering.org/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file
diff --git a/web/nms.gathering.org/css/bootstrap-theme.min.css b/web/nms.gathering.org/css/bootstrap-theme.min.css
deleted file mode 100644
index cefa3d1..0000000
--- a/web/nms.gathering.org/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file
diff --git a/web/nms.gathering.org/css/bootstrap.css b/web/nms.gathering.org/css/bootstrap.css
deleted file mode 100644
index fb15e3d..0000000
--- a/web/nms.gathering.org/css/bootstrap.css
+++ /dev/null
@@ -1,6584 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-html {
- font-family: sans-serif;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-[hidden],
-template {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline: 0;
-}
-abbr[title] {
- border-bottom: 1px dotted;
-}
-b,
-strong {
- font-weight: bold;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- margin: .67em 0;
- font-size: 2em;
-}
-mark {
- color: #000;
- background: #ff0;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -.5em;
-}
-sub {
- bottom: -.25em;
-}
-img {
- border: 0;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- height: 0;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-pre {
- overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
- margin: 0;
- font: inherit;
- color: inherit;
-}
-button {
- overflow: visible;
-}
-button,
-select {
- text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-input {
- line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-fieldset {
- padding: .35em .625em .75em;
- margin: 0 2px;
- border: 1px solid #c0c0c0;
-}
-legend {
- padding: 0;
- border: 0;
-}
-textarea {
- overflow: auto;
-}
-optgroup {
- font-weight: bold;
-}
-table {
- border-spacing: 0;
- border-collapse: collapse;
-}
-td,
-th {
- padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
- *,
- *:before,
- *:after {
- color: #000 !important;
- text-shadow: none !important;
- background: transparent !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
-
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- select {
- background: #fff !important;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-@font-face {
- font-family: 'Glyphicons Halflings';
-
- src: url('../fonts/glyphicons-halflings-regular.eot');
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
-
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
- content: "\2a";
-}
-.glyphicon-plus:before {
- content: "\2b";
-}
-.glyphicon-euro:before,
-.glyphicon-eur:before {
- content: "\20ac";
-}
-.glyphicon-minus:before {
- content: "\2212";
-}
-.glyphicon-cloud:before {
- content: "\2601";
-}
-.glyphicon-envelope:before {
- content: "\2709";
-}
-.glyphicon-pencil:before {
- content: "\270f";
-}
-.glyphicon-glass:before {
- content: "\e001";
-}
-.glyphicon-music:before {
- content: "\e002";
-}
-.glyphicon-search:before {
- content: "\e003";
-}
-.glyphicon-heart:before {
- content: "\e005";
-}
-.glyphicon-star:before {
- content: "\e006";
-}
-.glyphicon-star-empty:before {
- content: "\e007";
-}
-.glyphicon-user:before {
- content: "\e008";
-}
-.glyphicon-film:before {
- content: "\e009";
-}
-.glyphicon-th-large:before {
- content: "\e010";
-}
-.glyphicon-th:before {
- content: "\e011";
-}
-.glyphicon-th-list:before {
- content: "\e012";
-}
-.glyphicon-ok:before {
- content: "\e013";
-}
-.glyphicon-remove:before {
- content: "\e014";
-}
-.glyphicon-zoom-in:before {
- content: "\e015";
-}
-.glyphicon-zoom-out:before {
- content: "\e016";
-}
-.glyphicon-off:before {
- content: "\e017";
-}
-.glyphicon-signal:before {
- content: "\e018";
-}
-.glyphicon-cog:before {
- content: "\e019";
-}
-.glyphicon-trash:before {
- content: "\e020";
-}
-.glyphicon-home:before {
- content: "\e021";
-}
-.glyphicon-file:before {
- content: "\e022";
-}
-.glyphicon-time:before {
- content: "\e023";
-}
-.glyphicon-road:before {
- content: "\e024";
-}
-.glyphicon-download-alt:before {
- content: "\e025";
-}
-.glyphicon-download:before {
- content: "\e026";
-}
-.glyphicon-upload:before {
- content: "\e027";
-}
-.glyphicon-inbox:before {
- content: "\e028";
-}
-.glyphicon-play-circle:before {
- content: "\e029";
-}
-.glyphicon-repeat:before {
- content: "\e030";
-}
-.glyphicon-refresh:before {
- content: "\e031";
-}
-.glyphicon-list-alt:before {
- content: "\e032";
-}
-.glyphicon-lock:before {
- content: "\e033";
-}
-.glyphicon-flag:before {
- content: "\e034";
-}
-.glyphicon-headphones:before {
- content: "\e035";
-}
-.glyphicon-volume-off:before {
- content: "\e036";
-}
-.glyphicon-volume-down:before {
- content: "\e037";
-}
-.glyphicon-volume-up:before {
- content: "\e038";
-}
-.glyphicon-qrcode:before {
- content: "\e039";
-}
-.glyphicon-barcode:before {
- content: "\e040";
-}
-.glyphicon-tag:before {
- content: "\e041";
-}
-.glyphicon-tags:before {
- content: "\e042";
-}
-.glyphicon-book:before {
- content: "\e043";
-}
-.glyphicon-bookmark:before {
- content: "\e044";
-}
-.glyphicon-print:before {
- content: "\e045";
-}
-.glyphicon-camera:before {
- content: "\e046";
-}
-.glyphicon-font:before {
- content: "\e047";
-}
-.glyphicon-bold:before {
- content: "\e048";
-}
-.glyphicon-italic:before {
- content: "\e049";
-}
-.glyphicon-text-height:before {
- content: "\e050";
-}
-.glyphicon-text-width:before {
- content: "\e051";
-}
-.glyphicon-align-left:before {
- content: "\e052";
-}
-.glyphicon-align-center:before {
- content: "\e053";
-}
-.glyphicon-align-right:before {
- content: "\e054";
-}
-.glyphicon-align-justify:before {
- content: "\e055";
-}
-.glyphicon-list:before {
- content: "\e056";
-}
-.glyphicon-indent-left:before {
- content: "\e057";
-}
-.glyphicon-indent-right:before {
- content: "\e058";
-}
-.glyphicon-facetime-video:before {
- content: "\e059";
-}
-.glyphicon-picture:before {
- content: "\e060";
-}
-.glyphicon-map-marker:before {
- content: "\e062";
-}
-.glyphicon-adjust:before {
- content: "\e063";
-}
-.glyphicon-tint:before {
- content: "\e064";
-}
-.glyphicon-edit:before {
- content: "\e065";
-}
-.glyphicon-share:before {
- content: "\e066";
-}
-.glyphicon-check:before {
- content: "\e067";
-}
-.glyphicon-move:before {
- content: "\e068";
-}
-.glyphicon-step-backward:before {
- content: "\e069";
-}
-.glyphicon-fast-backward:before {
- content: "\e070";
-}
-.glyphicon-backward:before {
- content: "\e071";
-}
-.glyphicon-play:before {
- content: "\e072";
-}
-.glyphicon-pause:before {
- content: "\e073";
-}
-.glyphicon-stop:before {
- content: "\e074";
-}
-.glyphicon-forward:before {
- content: "\e075";
-}
-.glyphicon-fast-forward:before {
- content: "\e076";
-}
-.glyphicon-step-forward:before {
- content: "\e077";
-}
-.glyphicon-eject:before {
- content: "\e078";
-}
-.glyphicon-chevron-left:before {
- content: "\e079";
-}
-.glyphicon-chevron-right:before {
- content: "\e080";
-}
-.glyphicon-plus-sign:before {
- content: "\e081";
-}
-.glyphicon-minus-sign:before {
- content: "\e082";
-}
-.glyphicon-remove-sign:before {
- content: "\e083";
-}
-.glyphicon-ok-sign:before {
- content: "\e084";
-}
-.glyphicon-question-sign:before {
- content: "\e085";
-}
-.glyphicon-info-sign:before {
- content: "\e086";
-}
-.glyphicon-screenshot:before {
- content: "\e087";
-}
-.glyphicon-remove-circle:before {
- content: "\e088";
-}
-.glyphicon-ok-circle:before {
- content: "\e089";
-}
-.glyphicon-ban-circle:before {
- content: "\e090";
-}
-.glyphicon-arrow-left:before {
- content: "\e091";
-}
-.glyphicon-arrow-right:before {
- content: "\e092";
-}
-.glyphicon-arrow-up:before {
- content: "\e093";
-}
-.glyphicon-arrow-down:before {
- content: "\e094";
-}
-.glyphicon-share-alt:before {
- content: "\e095";
-}
-.glyphicon-resize-full:before {
- content: "\e096";
-}
-.glyphicon-resize-small:before {
- content: "\e097";
-}
-.glyphicon-exclamation-sign:before {
- content: "\e101";
-}
-.glyphicon-gift:before {
- content: "\e102";
-}
-.glyphicon-leaf:before {
- content: "\e103";
-}
-.glyphicon-fire:before {
- content: "\e104";
-}
-.glyphicon-eye-open:before {
- content: "\e105";
-}
-.glyphicon-eye-close:before {
- content: "\e106";
-}
-.glyphicon-warning-sign:before {
- content: "\e107";
-}
-.glyphicon-plane:before {
- content: "\e108";
-}
-.glyphicon-calendar:before {
- content: "\e109";
-}
-.glyphicon-random:before {
- content: "\e110";
-}
-.glyphicon-comment:before {
- content: "\e111";
-}
-.glyphicon-magnet:before {
- content: "\e112";
-}
-.glyphicon-chevron-up:before {
- content: "\e113";
-}
-.glyphicon-chevron-down:before {
- content: "\e114";
-}
-.glyphicon-retweet:before {
- content: "\e115";
-}
-.glyphicon-shopping-cart:before {
- content: "\e116";
-}
-.glyphicon-folder-close:before {
- content: "\e117";
-}
-.glyphicon-folder-open:before {
- content: "\e118";
-}
-.glyphicon-resize-vertical:before {
- content: "\e119";
-}
-.glyphicon-resize-horizontal:before {
- content: "\e120";
-}
-.glyphicon-hdd:before {
- content: "\e121";
-}
-.glyphicon-bullhorn:before {
- content: "\e122";
-}
-.glyphicon-bell:before {
- content: "\e123";
-}
-.glyphicon-certificate:before {
- content: "\e124";
-}
-.glyphicon-thumbs-up:before {
- content: "\e125";
-}
-.glyphicon-thumbs-down:before {
- content: "\e126";
-}
-.glyphicon-hand-right:before {
- content: "\e127";
-}
-.glyphicon-hand-left:before {
- content: "\e128";
-}
-.glyphicon-hand-up:before {
- content: "\e129";
-}
-.glyphicon-hand-down:before {
- content: "\e130";
-}
-.glyphicon-circle-arrow-right:before {
- content: "\e131";
-}
-.glyphicon-circle-arrow-left:before {
- content: "\e132";
-}
-.glyphicon-circle-arrow-up:before {
- content: "\e133";
-}
-.glyphicon-circle-arrow-down:before {
- content: "\e134";
-}
-.glyphicon-globe:before {
- content: "\e135";
-}
-.glyphicon-wrench:before {
- content: "\e136";
-}
-.glyphicon-tasks:before {
- content: "\e137";
-}
-.glyphicon-filter:before {
- content: "\e138";
-}
-.glyphicon-briefcase:before {
- content: "\e139";
-}
-.glyphicon-fullscreen:before {
- content: "\e140";
-}
-.glyphicon-dashboard:before {
- content: "\e141";
-}
-.glyphicon-paperclip:before {
- content: "\e142";
-}
-.glyphicon-heart-empty:before {
- content: "\e143";
-}
-.glyphicon-link:before {
- content: "\e144";
-}
-.glyphicon-phone:before {
- content: "\e145";
-}
-.glyphicon-pushpin:before {
- content: "\e146";
-}
-.glyphicon-usd:before {
- content: "\e148";
-}
-.glyphicon-gbp:before {
- content: "\e149";
-}
-.glyphicon-sort:before {
- content: "\e150";
-}
-.glyphicon-sort-by-alphabet:before {
- content: "\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
-}
-.glyphicon-sort-by-order:before {
- content: "\e153";
-}
-.glyphicon-sort-by-order-alt:before {
- content: "\e154";
-}
-.glyphicon-sort-by-attributes:before {
- content: "\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
-}
-.glyphicon-unchecked:before {
- content: "\e157";
-}
-.glyphicon-expand:before {
- content: "\e158";
-}
-.glyphicon-collapse-down:before {
- content: "\e159";
-}
-.glyphicon-collapse-up:before {
- content: "\e160";
-}
-.glyphicon-log-in:before {
- content: "\e161";
-}
-.glyphicon-flash:before {
- content: "\e162";
-}
-.glyphicon-log-out:before {
- content: "\e163";
-}
-.glyphicon-new-window:before {
- content: "\e164";
-}
-.glyphicon-record:before {
- content: "\e165";
-}
-.glyphicon-save:before {
- content: "\e166";
-}
-.glyphicon-open:before {
- content: "\e167";
-}
-.glyphicon-saved:before {
- content: "\e168";
-}
-.glyphicon-import:before {
- content: "\e169";
-}
-.glyphicon-export:before {
- content: "\e170";
-}
-.glyphicon-send:before {
- content: "\e171";
-}
-.glyphicon-floppy-disk:before {
- content: "\e172";
-}
-.glyphicon-floppy-saved:before {
- content: "\e173";
-}
-.glyphicon-floppy-remove:before {
- content: "\e174";
-}
-.glyphicon-floppy-save:before {
- content: "\e175";
-}
-.glyphicon-floppy-open:before {
- content: "\e176";
-}
-.glyphicon-credit-card:before {
- content: "\e177";
-}
-.glyphicon-transfer:before {
- content: "\e178";
-}
-.glyphicon-cutlery:before {
- content: "\e179";
-}
-.glyphicon-header:before {
- content: "\e180";
-}
-.glyphicon-compressed:before {
- content: "\e181";
-}
-.glyphicon-earphone:before {
- content: "\e182";
-}
-.glyphicon-phone-alt:before {
- content: "\e183";
-}
-.glyphicon-tower:before {
- content: "\e184";
-}
-.glyphicon-stats:before {
- content: "\e185";
-}
-.glyphicon-sd-video:before {
- content: "\e186";
-}
-.glyphicon-hd-video:before {
- content: "\e187";
-}
-.glyphicon-subtitles:before {
- content: "\e188";
-}
-.glyphicon-sound-stereo:before {
- content: "\e189";
-}
-.glyphicon-sound-dolby:before {
- content: "\e190";
-}
-.glyphicon-sound-5-1:before {
- content: "\e191";
-}
-.glyphicon-sound-6-1:before {
- content: "\e192";
-}
-.glyphicon-sound-7-1:before {
- content: "\e193";
-}
-.glyphicon-copyright-mark:before {
- content: "\e194";
-}
-.glyphicon-registration-mark:before {
- content: "\e195";
-}
-.glyphicon-cloud-download:before {
- content: "\e197";
-}
-.glyphicon-cloud-upload:before {
- content: "\e198";
-}
-.glyphicon-tree-conifer:before {
- content: "\e199";
-}
-.glyphicon-tree-deciduous:before {
- content: "\e200";
-}
-.glyphicon-cd:before {
- content: "\e201";
-}
-.glyphicon-save-file:before {
- content: "\e202";
-}
-.glyphicon-open-file:before {
- content: "\e203";
-}
-.glyphicon-level-up:before {
- content: "\e204";
-}
-.glyphicon-copy:before {
- content: "\e205";
-}
-.glyphicon-paste:before {
- content: "\e206";
-}
-.glyphicon-alert:before {
- content: "\e209";
-}
-.glyphicon-equalizer:before {
- content: "\e210";
-}
-.glyphicon-king:before {
- content: "\e211";
-}
-.glyphicon-queen:before {
- content: "\e212";
-}
-.glyphicon-pawn:before {
- content: "\e213";
-}
-.glyphicon-bishop:before {
- content: "\e214";
-}
-.glyphicon-knight:before {
- content: "\e215";
-}
-.glyphicon-baby-formula:before {
- content: "\e216";
-}
-.glyphicon-tent:before {
- content: "\26fa";
-}
-.glyphicon-blackboard:before {
- content: "\e218";
-}
-.glyphicon-bed:before {
- content: "\e219";
-}
-.glyphicon-apple:before {
- content: "\f8ff";
-}
-.glyphicon-erase:before {
- content: "\e221";
-}
-.glyphicon-hourglass:before {
- content: "\231b";
-}
-.glyphicon-lamp:before {
- content: "\e223";
-}
-.glyphicon-duplicate:before {
- content: "\e224";
-}
-.glyphicon-piggy-bank:before {
- content: "\e225";
-}
-.glyphicon-scissors:before {
- content: "\e226";
-}
-.glyphicon-bitcoin:before {
- content: "\e227";
-}
-.glyphicon-btc:before {
- content: "\e227";
-}
-.glyphicon-xbt:before {
- content: "\e227";
-}
-.glyphicon-yen:before {
- content: "\00a5";
-}
-.glyphicon-jpy:before {
- content: "\00a5";
-}
-.glyphicon-ruble:before {
- content: "\20bd";
-}
-.glyphicon-rub:before {
- content: "\20bd";
-}
-.glyphicon-scale:before {
- content: "\e230";
-}
-.glyphicon-ice-lolly:before {
- content: "\e231";
-}
-.glyphicon-ice-lolly-tasted:before {
- content: "\e232";
-}
-.glyphicon-education:before {
- content: "\e233";
-}
-.glyphicon-option-horizontal:before {
- content: "\e234";
-}
-.glyphicon-option-vertical:before {
- content: "\e235";
-}
-.glyphicon-menu-hamburger:before {
- content: "\e236";
-}
-.glyphicon-modal-window:before {
- content: "\e237";
-}
-.glyphicon-oil:before {
- content: "\e238";
-}
-.glyphicon-grain:before {
- content: "\e239";
-}
-.glyphicon-sunglasses:before {
- content: "\e240";
-}
-.glyphicon-text-size:before {
- content: "\e241";
-}
-.glyphicon-text-color:before {
- content: "\e242";
-}
-.glyphicon-text-background:before {
- content: "\e243";
-}
-.glyphicon-object-align-top:before {
- content: "\e244";
-}
-.glyphicon-object-align-bottom:before {
- content: "\e245";
-}
-.glyphicon-object-align-horizontal:before {
- content: "\e246";
-}
-.glyphicon-object-align-left:before {
- content: "\e247";
-}
-.glyphicon-object-align-vertical:before {
- content: "\e248";
-}
-.glyphicon-object-align-right:before {
- content: "\e249";
-}
-.glyphicon-triangle-right:before {
- content: "\e250";
-}
-.glyphicon-triangle-left:before {
- content: "\e251";
-}
-.glyphicon-triangle-bottom:before {
- content: "\e252";
-}
-.glyphicon-triangle-top:before {
- content: "\e253";
-}
-.glyphicon-console:before {
- content: "\e254";
-}
-.glyphicon-superscript:before {
- content: "\e255";
-}
-.glyphicon-subscript:before {
- content: "\e256";
-}
-.glyphicon-menu-left:before {
- content: "\e257";
-}
-.glyphicon-menu-right:before {
- content: "\e258";
-}
-.glyphicon-menu-down:before {
- content: "\e259";
-}
-.glyphicon-menu-up:before {
- content: "\e260";
-}
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-html {
- font-size: 10px;
-
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 1.42857143;
- color: #333;
- background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-a {
- color: #337ab7;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-figure {
- margin: 0;
-}
-img {
- vertical-align: middle;
-}
-.img-responsive,
-.thumbnail > img,
-.thumbnail a > img,
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-.img-rounded {
- border-radius: 6px;
-}
-.img-thumbnail {
- display: inline-block;
- max-width: 100%;
- height: auto;
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
-}
-.img-circle {
- border-radius: 50%;
-}
-hr {
- margin-top: 20px;
- margin-bottom: 20px;
- border: 0;
- border-top: 1px solid #eee;
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-[role="button"] {
- cursor: pointer;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 20px;
- margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-h1,
-.h1 {
- font-size: 36px;
-}
-h2,
-.h2 {
- font-size: 30px;
-}
-h3,
-.h3 {
- font-size: 24px;
-}
-h4,
-.h4 {
- font-size: 18px;
-}
-h5,
-.h5 {
- font-size: 14px;
-}
-h6,
-.h6 {
- font-size: 12px;
-}
-p {
- margin: 0 0 10px;
-}
-.lead {
- margin-bottom: 20px;
- font-size: 16px;
- font-weight: 300;
- line-height: 1.4;
-}
-@media (min-width: 768px) {
- .lead {
- font-size: 21px;
- }
-}
-small,
-.small {
- font-size: 85%;
-}
-mark,
-.mark {
- padding: .2em;
- background-color: #fcf8e3;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-.text-justify {
- text-align: justify;
-}
-.text-nowrap {
- white-space: nowrap;
-}
-.text-lowercase {
- text-transform: lowercase;
-}
-.text-uppercase {
- text-transform: uppercase;
-}
-.text-capitalize {
- text-transform: capitalize;
-}
-.text-muted {
- color: #777;
-}
-.text-primary {
- color: #337ab7;
-}
-a.text-primary:hover {
- color: #286090;
-}
-.text-success {
- color: #3c763d;
-}
-a.text-success:hover {
- color: #2b542c;
-}
-.text-info {
- color: #31708f;
-}
-a.text-info:hover {
- color: #245269;
-}
-.text-warning {
- color: #8a6d3b;
-}
-a.text-warning:hover {
- color: #66512c;
-}
-.text-danger {
- color: #a94442;
-}
-a.text-danger:hover {
- color: #843534;
-}
-.bg-primary {
- color: #fff;
- background-color: #337ab7;
-}
-a.bg-primary:hover {
- background-color: #286090;
-}
-.bg-success {
- background-color: #dff0d8;
-}
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-.bg-info {
- background-color: #d9edf7;
-}
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-.bg-warning {
- background-color: #fcf8e3;
-}
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-.bg-danger {
- background-color: #f2dede;
-}
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-.page-header {
- padding-bottom: 9px;
- margin: 40px 0 20px;
- border-bottom: 1px solid #eee;
-}
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
- margin-bottom: 0;
-}
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-.list-inline {
- padding-left: 0;
- margin-left: -5px;
- list-style: none;
-}
-.list-inline > li {
- display: inline-block;
- padding-right: 5px;
- padding-left: 5px;
-}
-dl {
- margin-top: 0;
- margin-bottom: 20px;
-}
-dt,
-dd {
- line-height: 1.42857143;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777;
-}
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 10px 20px;
- margin: 0 0 20px;
- font-size: 17.5px;
- border-left: 5px solid #eee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- text-align: right;
- border-right: 5px solid #eee;
- border-left: 0;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-address {
- margin-bottom: 20px;
- font-style: normal;
- line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 4px;
-}
-kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #fff;
- background-color: #333;
- border-radius: 3px;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
-}
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #333;
- word-break: break-all;
- word-wrap: break-word;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-.container {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-@media (min-width: 768px) {
- .container {
- width: 750px;
- }
-}
-@media (min-width: 992px) {
- .container {
- width: 970px;
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px;
- }
-}
-.container-fluid {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-.row {
- margin-right: -15px;
- margin-left: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
-}
-.col-xs-12 {
- width: 100%;
-}
-.col-xs-11 {
- width: 91.66666667%;
-}
-.col-xs-10 {
- width: 83.33333333%;
-}
-.col-xs-9 {
- width: 75%;
-}
-.col-xs-8 {
- width: 66.66666667%;
-}
-.col-xs-7 {
- width: 58.33333333%;
-}
-.col-xs-6 {
- width: 50%;
-}
-.col-xs-5 {
- width: 41.66666667%;
-}
-.col-xs-4 {
- width: 33.33333333%;
-}
-.col-xs-3 {
- width: 25%;
-}
-.col-xs-2 {
- width: 16.66666667%;
-}
-.col-xs-1 {
- width: 8.33333333%;
-}
-.col-xs-pull-12 {
- right: 100%;
-}
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-.col-xs-pull-9 {
- right: 75%;
-}
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-.col-xs-pull-6 {
- right: 50%;
-}
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-.col-xs-pull-3 {
- right: 25%;
-}
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-.col-xs-pull-0 {
- right: auto;
-}
-.col-xs-push-12 {
- left: 100%;
-}
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-.col-xs-push-9 {
- left: 75%;
-}
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-.col-xs-push-6 {
- left: 50%;
-}
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-.col-xs-push-3 {
- left: 25%;
-}
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-.col-xs-push-0 {
- left: auto;
-}
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
- margin-left: 0;
-}
-@media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-@media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-table {
- background-color: transparent;
-}
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777;
- text-align: left;
-}
-th {
- text-align: left;
-}
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
- border-top: 0;
-}
-.table > tbody + tbody {
- border-top: 2px solid #ddd;
-}
-.table .table {
- background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
- padding: 5px;
-}
-.table-bordered {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
- border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
-}
-table col[class*="col-"] {
- position: static;
- display: table-column;
- float: none;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- display: table-cell;
- float: none;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
- background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
- background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
- background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
- background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
-}
-.table-responsive {
- min-height: .01%;
- overflow-x: auto;
-}
-@media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 15px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
-}
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: inherit;
- color: #333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
-}
-input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
-}
-input[type="file"] {
- display: block;
-}
-input[type="range"] {
- display: block;
- width: 100%;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-output {
- display: block;
- padding-top: 7px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
-}
-.form-control {
- display: block;
- width: 100%;
- height: 34px;
- padding: 6px 12px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-.form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
-}
-.form-control:-ms-input-placeholder {
- color: #999;
-}
-.form-control::-webkit-input-placeholder {
- color: #999;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- background-color: #eee;
- opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
-}
-textarea.form-control {
- height: auto;
-}
-input[type="search"] {
- -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 34px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 46px;
- }
-}
-.form-group {
- margin-bottom: 15px;
-}
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
- min-height: 20px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-top: 4px \9;
- margin-left: -20px;
-}
-.radio + .radio,
-.checkbox + .checkbox {
- margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- vertical-align: middle;
- cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-.form-control-static {
- min-height: 34px;
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-right: 0;
- padding-left: 0;
-}
-.input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-sm {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
- height: auto;
-}
-.form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.form-group-sm .form-control {
- height: 30px;
- line-height: 30px;
-}
-textarea.form-group-sm .form-control,
-select[multiple].form-group-sm .form-control {
- height: auto;
-}
-.form-group-sm .form-control-static {
- height: 30px;
- min-height: 32px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
-}
-.input-lg {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-lg {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
- height: auto;
-}
-.form-group-lg .form-control {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.form-group-lg .form-control {
- height: 46px;
- line-height: 46px;
-}
-textarea.form-group-lg .form-control,
-select[multiple].form-group-lg .form-control {
- height: auto;
-}
-.form-group-lg .form-control-static {
- height: 46px;
- min-height: 38px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
-}
-.has-feedback {
- position: relative;
-}
-.has-feedback .form-control {
- padding-right: 42.5px;
-}
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 34px;
- height: 34px;
- line-height: 34px;
- text-align: center;
- pointer-events: none;
-}
-.input-lg + .form-control-feedback {
- width: 46px;
- height: 46px;
- line-height: 46px;
-}
-.input-sm + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #3c763d;
-}
-.has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #3c763d;
-}
-.has-success .form-control-feedback {
- color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #8a6d3b;
-}
-.has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #8a6d3b;
-}
-.has-warning .form-control-feedback {
- color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #a94442;
-}
-.has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-}
-.has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
- color: #a94442;
- background-color: #f2dede;
- border-color: #a94442;
-}
-.has-error .form-control-feedback {
- color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
- top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
-}
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #737373;
-}
-@media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- padding-top: 7px;
- margin-top: 0;
- margin-bottom: 0;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 27px;
-}
-.form-horizontal .form-group {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .control-label {
- padding-top: 7px;
- margin-bottom: 0;
- text-align: right;
- }
-}
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.333333px;
- }
-}
-@media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-.btn {
- display: inline-block;
- padding: 6px 12px;
- margin-bottom: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333;
- text-decoration: none;
-}
-.btn:active,
-.btn.active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
- pointer-events: none;
- cursor: not-allowed;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- opacity: .65;
-}
-.btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
- background-image: none;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-.btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary.focus,
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
- background-image: none;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-.btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success.focus,
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
- background-image: none;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
- background-color: #5cb85c;
- border-color: #4cae4c;
-}
-.btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
-}
-.btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info.focus,
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
- background-image: none;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
- background-color: #5bc0de;
- border-color: #46b8da;
-}
-.btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
-}
-.btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning.focus,
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
- background-image: none;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-.btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
-}
-.btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger.focus,
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
- background-image: none;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
- background-color: #d9534f;
- border-color: #d43f3a;
-}
-.btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
-}
-.btn-link {
- font-weight: normal;
- color: #337ab7;
- border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
- border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
- color: #777;
- text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity .15s linear;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- display: none;
-}
-.collapse.in {
- display: block;
-}
-tr.collapse.in {
- display: table-row;
-}
-tbody.collapse.in {
- display: table-row-group;
-}
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
- -webkit-transition-duration: .35s;
- -o-transition-duration: .35s;
- transition-duration: .35s;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px dashed;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle:focus {
- outline: 0;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- text-align: left;
- list-style: none;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #337ab7;
- outline: 0;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.open > .dropdown-menu {
- display: block;
-}
-.open > a {
- outline: 0;
-}
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777;
- white-space: nowrap;
-}
-.dropdown-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 990;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- content: "";
- border-top: 0;
- border-bottom: 4px solid;
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
-}
-@media (min-width: 768px) {
- .navbar-right .dropdown-menu {
- right: 0;
- left: auto;
- }
- .navbar-right .dropdown-menu-left {
- right: auto;
- left: 0;
- }
-}
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
- z-index: 2;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -1px;
-}
-.btn-toolbar {
- margin-left: -5px;
-}
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
- margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group > .btn-group {
- float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-right: 8px;
- padding-left: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
- padding-right: 12px;
- padding-left: 12px;
-}
-.btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-.btn .caret {
- margin-left: 0;
-}
-.btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
- border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
- float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
- display: table-cell;
- float: none;
- width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
- width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-.input-group[class*="col-"] {
- float: none;
- padding-right: 0;
- padding-left: 0;
-}
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-.input-group-lg > .form-control,
-.input-group-lg > .input-group-addon,
-.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- padding: 10px 16px;
- font-size: 18px;
- line-height: 1.3333333;
- border-radius: 6px;
-}
-select.input-group-lg > .form-control,
-select.input-group-lg > .input-group-addon,
-select.input-group-lg > .input-group-btn > .btn {
- height: 46px;
- line-height: 46px;
-}
-textarea.input-group-lg > .form-control,
-textarea.input-group-lg > .input-group-addon,
-textarea.input-group-lg > .input-group-btn > .btn,
-select[multiple].input-group-lg > .form-control,
-select[multiple].input-group-lg > .input-group-addon,
-select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-sm > .form-control,
-.input-group-sm > .input-group-addon,
-.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 3px;
-}
-select.input-group-sm > .form-control,
-select.input-group-sm > .input-group-addon,
-select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
-}
-textarea.input-group-sm > .form-control,
-textarea.input-group-sm > .input-group-addon,
-textarea.input-group-sm > .input-group-btn > .btn,
-select[multiple].input-group-sm > .form-control,
-select[multiple].input-group-sm > .input-group-addon,
-select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
-}
-.input-group-addon,
-.input-group-btn,
-.input-group .form-control {
- display: table-cell;
-}
-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
-}
-.input-group-addon,
-.input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
-}
-.input-group-addon {
- padding: 6px 12px;
- font-size: 14px;
- font-weight: normal;
- line-height: 1;
- color: #555;
- text-align: center;
- background-color: #eee;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 3px;
-}
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 18px;
- border-radius: 6px;
-}
-.input-group-addon input[type="radio"],
-.input-group-addon input[type="checkbox"] {
- margin-top: 0;
-}
-.input-group .form-control:first-child,
-.input-group-addon:first-child,
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group > .btn,
-.input-group-btn:first-child > .dropdown-toggle,
-.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.input-group-addon:first-child {
- border-right: 0;
-}
-.input-group .form-control:last-child,
-.input-group-addon:last-child,
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group > .btn,
-.input-group-btn:last-child > .dropdown-toggle,
-.input-group-btn:first-child > .btn:not(:first-child),
-.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-.input-group-addon:last-child {
- border-left: 0;
-}
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-.input-group-btn > .btn {
- position: relative;
-}
-.input-group-btn > .btn + .btn {
- margin-left: -1px;
-}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
- z-index: 2;
-}
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- margin-right: -1px;
-}
-.input-group-btn:last-child > .btn,
-.input-group-btn:last-child > .btn-group {
- margin-left: -1px;
-}
-.nav {
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-.nav > li {
- position: relative;
- display: block;
-}
-.nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.nav > li.disabled > a {
- color: #777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
- color: #777;
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
- background-color: #eee;
- border-color: #337ab7;
-}
-.nav .nav-divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- float: left;
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
- border-color: #eee #eee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #555;
- cursor: default;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
- float: none;
-}
-.nav-tabs.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.nav-pills > li {
- float: left;
-}
-.nav-pills > li > a {
- border-radius: 4px;
-}
-.nav-pills > li + li {
- margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #337ab7;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
-}
-.nav-justified {
- width: 100%;
-}
-.nav-justified > li {
- float: none;
-}
-.nav-justified > li > a {
- margin-bottom: 5px;
- text-align: center;
-}
-.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-@media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
-}
-.nav-tabs-justified {
- border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 4px 4px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
-}
-.tab-content > .tab-pane {
- display: none;
-}
-.tab-content > .active {
- display: block;
-}
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar {
- position: relative;
- min-height: 50px;
- margin-bottom: 20px;
- border: 1px solid transparent;
-}
-@media (min-width: 768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-@media (min-width: 768px) {
- .navbar-header {
- float: left;
- }
-}
-.navbar-collapse {
- padding-right: 15px;
- padding-left: 15px;
- overflow-x: visible;
- -webkit-overflow-scrolling: touch;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
-}
-.navbar-collapse.in {
- overflow-y: auto;
-}
-@media (min-width: 768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-right: 0;
- padding-left: 0;
- }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-@media (min-width: 768px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-.navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
- .navbar-static-top {
- border-radius: 0;
- }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-@media (min-width: 768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-.navbar-brand {
- float: left;
- height: 50px;
- padding: 15px 15px;
- font-size: 18px;
- line-height: 20px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-.navbar-brand > img {
- display: block;
-}
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-.navbar-toggle {
- position: relative;
- float: right;
- padding: 9px 10px;
- margin-top: 8px;
- margin-right: 15px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.navbar-toggle:focus {
- outline: 0;
-}
-.navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
-}
-@media (min-width: 768px) {
- .navbar-toggle {
- display: none;
- }
-}
-.navbar-nav {
- margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 20px;
-}
-@media (max-width: 767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 20px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
-}
-@media (min-width: 768px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 15px;
- padding-bottom: 15px;
- }
-}
-.navbar-form {
- padding: 10px 15px;
- margin-top: 8px;
- margin-right: -15px;
- margin-bottom: 8px;
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
-}
-@media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-@media (max-width: 767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-@media (min-width: 768px) {
- .navbar-form {
- width: auto;
- padding-top: 0;
- padding-bottom: 0;
- margin-right: 0;
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
-}
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-.navbar-btn {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-.navbar-text {
- margin-top: 15px;
- margin-bottom: 15px;
-}
-@media (min-width: 768px) {
- .navbar-text {
- float: left;
- margin-right: 15px;
- margin-left: 15px;
- }
-}
-@media (min-width: 768px) {
- .navbar-left {
- float: left !important;
- }
- .navbar-right {
- float: right !important;
- margin-right: -15px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
-}
-.navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
- color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
-}
-.navbar-default .navbar-text {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a {
- color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
-}
-.navbar-default .navbar-toggle {
- border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
- background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #555;
- background-color: #e7e7e7;
-}
-@media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
-}
-.navbar-default .navbar-link {
- color: #777;
-}
-.navbar-default .navbar-link:hover {
- color: #333;
-}
-.navbar-default .btn-link {
- color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-.navbar-inverse {
- background-color: #222;
- border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-text {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
- border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
- background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
- border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
- color: #fff;
- background-color: #080808;
-}
-@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-.navbar-inverse .navbar-link {
- color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-.navbar-inverse .btn-link {
- color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin-bottom: 20px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
-}
-.breadcrumb > li + li:before {
- padding: 0 5px;
- color: #ccc;
- content: "/\00a0";
-}
-.breadcrumb > .active {
- color: #777;
-}
-.pagination {
- display: inline-block;
- padding-left: 0;
- margin: 20px 0;
- border-radius: 4px;
-}
-.pagination > li {
- display: inline;
-}
-.pagination > li > a,
-.pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- margin-left: -1px;
- line-height: 1.42857143;
- color: #337ab7;
- text-decoration: none;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
- margin-left: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination > li > a:hover,
-.pagination > li > span:hover,
-.pagination > li > a:focus,
-.pagination > li > span:focus {
- color: #23527c;
- background-color: #eee;
- border-color: #ddd;
-}
-.pagination > .active > a,
-.pagination > .active > span,
-.pagination > .active > a:hover,
-.pagination > .active > span:hover,
-.pagination > .active > a:focus,
-.pagination > .active > span:focus {
- z-index: 2;
- color: #fff;
- cursor: default;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.pagination > .disabled > span,
-.pagination > .disabled > span:hover,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > a,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > a:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
- border-color: #ddd;
-}
-.pagination-lg > li > a,
-.pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 18px;
-}
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
- border-top-left-radius: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
- border-top-right-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-sm > li > a,
-.pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
-}
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-.pager {
- padding-left: 0;
- margin: 20px 0;
- text-align: center;
- list-style: none;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #eee;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #777;
- cursor: not-allowed;
- background-color: #fff;
-}
-.label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
-}
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.label:empty {
- display: none;
-}
-.btn .label {
- position: relative;
- top: -1px;
-}
-.label-default {
- background-color: #777;
-}
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #5e5e5e;
-}
-.label-primary {
- background-color: #337ab7;
-}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #286090;
-}
-.label-success {
- background-color: #5cb85c;
-}
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #449d44;
-}
-.label-info {
- background-color: #5bc0de;
-}
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #31b0d5;
-}
-.label-warning {
- background-color: #f0ad4e;
-}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ec971f;
-}
-.label-danger {
- background-color: #d9534f;
-}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #c9302c;
-}
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #777;
- border-radius: 10px;
-}
-.badge:empty {
- display: none;
-}
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-xs .badge,
-.btn-group-xs > .btn .badge {
- top: 0;
- padding: 1px 5px;
-}
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-.list-group-item.active > .badge,
-.nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.list-group-item > .badge {
- float: right;
-}
-.list-group-item > .badge + .badge {
- margin-right: 5px;
-}
-.nav-pills > li > a > .badge {
- margin-left: 3px;
-}
-.jumbotron {
- padding: 30px 15px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eee;
-}
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 21px;
- font-weight: 200;
-}
-.jumbotron > hr {
- border-top-color: #d5d5d5;
-}
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
-}
-.jumbotron .container {
- max-width: 100%;
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding: 48px 0;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-right: 60px;
- padding-left: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 63px;
- }
-}
-.thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 20px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: border .2s ease-in-out;
- -o-transition: border .2s ease-in-out;
- transition: border .2s ease-in-out;
-}
-.thumbnail > img,
-.thumbnail a > img {
- margin-right: auto;
- margin-left: auto;
-}
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #337ab7;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #333;
-}
-.alert {
- padding: 15px;
- margin-bottom: 20px;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-.alert h4 {
- margin-top: 0;
- color: inherit;
-}
-.alert .alert-link {
- font-weight: bold;
-}
-.alert > p,
-.alert > ul {
- margin-bottom: 0;
-}
-.alert > p + p {
- margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
- padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-.alert-success {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
- color: #2b542c;
-}
-.alert-info {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
- color: #245269;
-}
-.alert-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
- color: #66512c;
-}
-.alert-danger {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
- color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f5f5f5;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
-}
-.progress-bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- line-height: 20px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
- -webkit-transition: width .6s ease;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
- background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
- background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
- background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
- background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media,
-.media-body {
- overflow: hidden;
- zoom: 1;
-}
-.media-body {
- width: 10000px;
-}
-.media-object {
- display: block;
-}
-.media-right,
-.media > .pull-right {
- padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
- padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-.media-middle {
- vertical-align: middle;
-}
-.media-bottom {
- vertical-align: bottom;
-}
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-.list-group {
- padding-left: 0;
- margin-bottom: 20px;
-}
-.list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
-}
-.list-group-item:first-child {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-a.list-group-item {
- color: #555;
-}
-a.list-group-item .list-group-item-heading {
- color: #333;
-}
-a.list-group-item:hover,
-a.list-group-item:focus {
- color: #555;
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- color: #777;
- cursor: not-allowed;
- background-color: #eee;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
-}
-.list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
-}
-a.list-group-item-success {
- color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
-}
-.list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
-}
-a.list-group-item-info {
- color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
-}
-.list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
-}
-a.list-group-item-warning {
- color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
-}
-.list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
-}
-a.list-group-item-danger {
- color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
-}
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-.panel {
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
-}
-.panel-body {
- padding: 15px;
-}
-.panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 16px;
- color: inherit;
-}
-.panel-title > a,
-.panel-title > small,
-.panel-title > .small,
-.panel-title > small > a,
-.panel-title > .small > a {
- color: inherit;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
- margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
-}
-.list-group + .panel-footer {
- border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
- margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
- padding-right: 15px;
- padding-left: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
- border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
-}
-.panel > .table-responsive {
- margin-bottom: 0;
- border: 0;
-}
-.panel-group {
- margin-bottom: 20px;
-}
-.panel-group .panel {
- margin-bottom: 0;
- border-radius: 4px;
-}
-.panel-group .panel + .panel {
- margin-top: 5px;
-}
-.panel-group .panel-heading {
- border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
- border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
-}
-.panel-default {
- border-color: #ddd;
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
-}
-.panel-primary {
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
-}
-.panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
-}
-.panel-success {
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
-}
-.panel-info {
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
-}
-.panel-warning {
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
-}
-.panel-danger {
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
-}
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, .15);
-}
-.well-lg {
- padding: 24px;
- border-radius: 6px;
-}
-.well-sm {
- padding: 9px;
- border-radius: 3px;
-}
-.close {
- float: right;
- font-size: 21px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- filter: alpha(opacity=20);
- opacity: .2;
-}
-.close:hover,
-.close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- filter: alpha(opacity=50);
- opacity: .5;
-}
-button.close {
- -webkit-appearance: none;
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
-}
-.modal-open {
- overflow: hidden;
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: none;
- overflow: hidden;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out;
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
-}
-.modal-backdrop.fade {
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.modal-backdrop.in {
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.modal-header {
- min-height: 16.42857143px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
- margin-top: -2px;
-}
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-.modal-body {
- position: relative;
- padding: 15px;
-}
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-@media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
- }
- .modal-sm {
- width: 300px;
- }
-}
-@media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
-}
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 12px;
- font-weight: normal;
- line-height: 1.4;
- filter: alpha(opacity=0);
- opacity: 0;
-}
-.tooltip.in {
- filter: alpha(opacity=90);
- opacity: .9;
-}
-.tooltip.top {
- padding: 5px 0;
- margin-top: -3px;
-}
-.tooltip.right {
- padding: 0 5px;
- margin-left: 3px;
-}
-.tooltip.bottom {
- padding: 5px 0;
- margin-top: 3px;
-}
-.tooltip.left {
- padding: 0 5px;
- margin-left: -3px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- text-decoration: none;
- background-color: #000;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-left .tooltip-arrow {
- right: 5px;
- bottom: 0;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: left;
- white-space: normal;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, .2);
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 5px 5px 0 0;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover > .arrow,
-.popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover > .arrow {
- border-width: 11px;
-}
-.popover > .arrow:after {
- content: "";
- border-width: 10px;
-}
-.popover.top > .arrow {
- bottom: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, .25);
- border-bottom-width: 0;
-}
-.popover.top > .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- content: " ";
- border-top-color: #fff;
- border-bottom-width: 0;
-}
-.popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, .25);
- border-left-width: 0;
-}
-.popover.right > .arrow:after {
- bottom: -10px;
- left: 1px;
- content: " ";
- border-right-color: #fff;
- border-left-width: 0;
-}
-.popover.bottom > .arrow {
- top: -11px;
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, .25);
-}
-.popover.bottom > .arrow:after {
- top: 1px;
- margin-left: -10px;
- content: " ";
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-.popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, .25);
-}
-.popover.left > .arrow:after {
- right: 1px;
- bottom: -10px;
- content: " ";
- border-right-width: 0;
- border-left-color: #fff;
-}
-.carousel {
- position: relative;
-}
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-.carousel-inner > .item {
- position: relative;
- display: none;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- line-height: 1;
-}
-@media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform .6s ease-in-out;
- -o-transition: -o-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
-
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- left: 0;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- left: 0;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- left: 0;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 15%;
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
- filter: alpha(opacity=50);
- opacity: .5;
-}
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control.right {
- right: 0;
- left: auto;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
- background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- background-repeat: repeat-x;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #fff;
- text-decoration: none;
- filter: alpha(opacity=90);
- outline: 0;
- opacity: .9;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-left,
-.carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
- line-height: 1;
-}
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- padding-left: 0;
- margin-left: -30%;
- text-align: center;
- list-style: none;
-}
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- border: 1px solid #fff;
- border-radius: 10px;
-}
-.carousel-indicators .active {
- width: 12px;
- height: 12px;
- margin: 0;
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
-}
-.carousel-caption .btn {
- text-shadow: none;
-}
-@media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
- .carousel-caption {
- right: 20%;
- left: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.panel-body:before,
-.panel-body:after,
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: " ";
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.panel-body:after,
-.modal-footer:after {
- clear: both;
-}
-.center-block {
- display: block;
- margin-right: auto;
- margin-left: auto;
-}
-.pull-right {
- float: right !important;
-}
-.pull-left {
- float: left !important;
-}
-.hide {
- display: none !important;
-}
-.show {
- display: block !important;
-}
-.invisible {
- visibility: hidden;
-}
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.hidden {
- display: none !important;
-}
-.affix {
- position: fixed;
-}
-@-ms-viewport {
- width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-@media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-@media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-@media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-@media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-.visible-print-block {
- display: none !important;
-}
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-.visible-print-inline {
- display: none !important;
-}
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-.visible-print-inline-block {
- display: none !important;
-}
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-/*# sourceMappingURL=bootstrap.css.map */
diff --git a/web/nms.gathering.org/css/bootstrap.css.map b/web/nms.gathering.org/css/bootstrap.css.map
deleted file mode 100644
index 2fd84f3..0000000
--- a/web/nms.gathering.org/css/bootstrap.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,kBAAA;EH2tB9C;AG1tBmC;EAAW,kBAAA;EH6tB9C;AG5tBmC;EAAW,kBAAA;EH+tB9C;AG9tBmC;EAAW,kBAAA;EHiuB9C;AGhuBmC;EAAW,kBAAA;EHmuB9C;AGluBmC;EAAW,kBAAA;EHquB9C;AGpuBmC;EAAW,kBAAA;EHuuB9C;AGtuBmC;EAAW,kBAAA;EHyuB9C;AGxuBmC;EAAW,kBAAA;EH2uB9C;AG1uBmC;EAAW,kBAAA;EH6uB9C;AG5uBmC;EAAW,kBAAA;EH+uB9C;AG9uBmC;EAAW,kBAAA;EHivB9C;AIvhCD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL09BT;AIzhCD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELg+BT;AIvhCD;EACE,iBAAA;EACA,+CAAA;EJyhCD;AIthCD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJwhCD;AIphCD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJshCD;AIhhCD;EACE,gBAAA;EACA,uBAAA;EJkhCD;AIhhCC;;EAEE,gBAAA;EACA,4BAAA;EJkhCH;AI/gCC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENskCD;AIzgCD;EACE,WAAA;EJ2gCD;AIrgCD;EACE,wBAAA;EJugCD;AIngCD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPilCD;AIvgCD;EACE,oBAAA;EJygCD;AIngCD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPimCD;AIngCD;EACE,oBAAA;EJqgCD;AI//BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJigCD;AIz/BD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ2/BD;AIn/BC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJq/BH;AIz+BD;EACE,iBAAA;EJ2+BD;AQnoCD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+oCD;AQppCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERqqCH;AQjqCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERsqCD;AQ1qCD;;;;;;;;;;;;EAQI,gBAAA;ERgrCH;AQ7qCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERkrCD;AQtrCD;;;;;;;;;;;;EAQI,gBAAA;ER4rCH;AQxrCD;;EAAU,iBAAA;ER4rCT;AQ3rCD;;EAAU,iBAAA;ER+rCT;AQ9rCD;;EAAU,iBAAA;ERksCT;AQjsCD;;EAAU,iBAAA;ERqsCT;AQpsCD;;EAAU,iBAAA;ERwsCT;AQvsCD;;EAAU,iBAAA;ER2sCT;AQrsCD;EACE,kBAAA;ERusCD;AQpsCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERssCD;AQjsCD;EAAA;IAFI,iBAAA;IRusCD;EACF;AQ/rCD;;EAEE,gBAAA;ERisCD;AQ9rCD;;EAEE,2BAAA;EACA,eAAA;ERgsCD;AQ5rCD;EAAuB,kBAAA;ER+rCtB;AQ9rCD;EAAuB,mBAAA;ERisCtB;AQhsCD;EAAuB,oBAAA;ERmsCtB;AQlsCD;EAAuB,qBAAA;ERqsCtB;AQpsCD;EAAuB,qBAAA;ERusCtB;AQpsCD;EAAuB,2BAAA;ERusCtB;AQtsCD;EAAuB,2BAAA;ERysCtB;AQxsCD;EAAuB,4BAAA;ER2sCtB;AQxsCD;EACE,gBAAA;ER0sCD;AQxsCD;ECrGE,gBAAA;ETgzCD;AS/yCC;EACE,gBAAA;ETizCH;AQ3sCD;ECxGE,gBAAA;ETszCD;ASrzCC;EACE,gBAAA;ETuzCH;AQ9sCD;EC3GE,gBAAA;ET4zCD;AS3zCC;EACE,gBAAA;ET6zCH;AQjtCD;EC9GE,gBAAA;ETk0CD;ASj0CC;EACE,gBAAA;ETm0CH;AQptCD;ECjHE,gBAAA;ETw0CD;ASv0CC;EACE,gBAAA;ETy0CH;AQntCD;EAGE,aAAA;EE3HA,2BAAA;EV+0CD;AU90CC;EACE,2BAAA;EVg1CH;AQptCD;EE9HE,2BAAA;EVq1CD;AUp1CC;EACE,2BAAA;EVs1CH;AQvtCD;EEjIE,2BAAA;EV21CD;AU11CC;EACE,2BAAA;EV41CH;AQ1tCD;EEpIE,2BAAA;EVi2CD;AUh2CC;EACE,2BAAA;EVk2CH;AQ7tCD;EEvIE,2BAAA;EVu2CD;AUt2CC;EACE,2BAAA;EVw2CH;AQ3tCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER6tCD;AQrtCD;;EAEE,eAAA;EACA,qBAAA;ERutCD;AQ1tCD;;;;EAMI,kBAAA;ER0tCH;AQntCD;EACE,iBAAA;EACA,kBAAA;ERqtCD;AQjtCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERotCD;AQttCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERotCH;AQ/sCD;EACE,eAAA;EACA,qBAAA;ERitCD;AQ/sCD;;EAEE,yBAAA;ERitCD;AQ/sCD;EACE,mBAAA;ERitCD;AQ/sCD;EACE,gBAAA;ERitCD;AQxrCD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IX65CC;EQlsCH;IAHM,oBAAA;IRwsCH;EACF;AQ/rCD;;EAGE,cAAA;EACA,mCAAA;ERgsCD;AQ9rCD;EACE,gBAAA;EA9IqB,2BAAA;ER+0CtB;AQ5rCD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER8rCD;AQzrCG;;;EACE,kBAAA;ER6rCL;AQvsCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERyrCH;AQvrCG;;;EACE,wBAAA;ER2rCL;AQnrCD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERqrCD;AQ/qCG;;;;;;EAAW,aAAA;ERurCd;AQtrCG;;;;;;EACE,wBAAA;ER6rCL;AQvrCD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERyrCD;AY/9CD;;;;EAIE,gEAAA;EZi+CD;AY79CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZ+9CD;AY39CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZ69CD;AYn+CD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZ69CH;AYx9CD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ09CD;AYr+CD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZy9CH;AYp9CD;EACE,mBAAA;EACA,oBAAA;EZs9CD;AahhDD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EdshDD;AahhDC;EAAA;IAFE,cAAA;IbshDD;EACF;AalhDC;EAAA;IAFE,cAAA;IbwhDD;EACF;AaphDD;EAAA;IAFI,eAAA;Ib0hDD;EACF;AajhDD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed2iDD;Aa9gDD;ECvBE,oBAAA;EACA,qBAAA;EdwiDD;AexiDG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;EfwiDL;AexhDG;EACE,aAAA;Ef0hDL;AenhDC;EACE,aAAA;EfqhDH;AethDC;EACE,qBAAA;EfwhDH;AezhDC;EACE,qBAAA;Ef2hDH;Ae5hDC;EACE,YAAA;Ef8hDH;Ae/hDC;EACE,qBAAA;EfiiDH;AeliDC;EACE,qBAAA;EfoiDH;AeriDC;EACE,YAAA;EfuiDH;AexiDC;EACE,qBAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,YAAA;EfgjDH;AejjDC;EACE,qBAAA;EfmjDH;AepjDC;EACE,oBAAA;EfsjDH;AexiDC;EACE,aAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,qBAAA;EfgjDH;AejjDC;EACE,YAAA;EfmjDH;AepjDC;EACE,qBAAA;EfsjDH;AevjDC;EACE,qBAAA;EfyjDH;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qE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","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n }\n .form-control-static {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n min-height: (@line-height-computed + @font-size-small);\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n }\n .form-control-static {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n min-height: (@line-height-computed + @font-size-large);\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding (@jumbotron-padding / 2);\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding: (@jumbotron-padding * 1.6) 0;\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-small;\n font-weight: normal;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: @line-height-base;\n text-align: left;\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file
diff --git a/web/nms.gathering.org/css/bootstrap.min.css b/web/nms.gathering.org/css/bootstrap.min.css
deleted file mode 100644
index cd1c616..0000000
--- a/web/nms.gathering.org/css/bootstrap.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file
diff --git a/web/nms.gathering.org/css/jquery.datetimepicker.css b/web/nms.gathering.org/css/jquery.datetimepicker.css
deleted file mode 100644
index beda145..0000000
--- a/web/nms.gathering.org/css/jquery.datetimepicker.css
+++ /dev/null
@@ -1,568 +0,0 @@
-.xdsoft_datetimepicker {
- box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506);
- background: #fff;
- border-bottom: 1px solid #bbb;
- border-left: 1px solid #ccc;
- border-right: 1px solid #ccc;
- border-top: 1px solid #ccc;
- color: #333;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- padding: 8px;
- padding-left: 0;
- padding-top: 2px;
- position: absolute;
- z-index: 9999;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- display: none;
-}
-.xdsoft_datetimepicker.xdsoft_rtl {
- padding: 8px 0 8px 8px;
-}
-
-.xdsoft_datetimepicker iframe {
- position: absolute;
- left: 0;
- top: 0;
- width: 75px;
- height: 210px;
- background: transparent;
- border: none;
-}
-
-/*For IE8 or lower*/
-.xdsoft_datetimepicker button {
- border: none !important;
-}
-
-.xdsoft_noselect {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- -o-user-select: none;
- user-select: none;
-}
-
-.xdsoft_noselect::selection { background: transparent }
-.xdsoft_noselect::-moz-selection { background: transparent }
-
-.xdsoft_datetimepicker.xdsoft_inline {
- display: inline-block;
- position: static;
- box-shadow: none;
-}
-
-.xdsoft_datetimepicker * {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
- margin: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
- display: none;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
- display: block;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker {
- width: 224px;
- float: left;
- margin-left: 8px;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker {
- float: right;
- margin-right: 8px;
- margin-left: 0;
-}
-
-.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker {
- width: 256px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker {
- width: 58px;
- float: left;
- text-align: center;
- margin-left: 8px;
- margin-top: 0;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker {
- float: right;
- margin-right: 8px;
- margin-left: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker {
- margin-top: 8px;
- margin-bottom: 3px
-}
-
-.xdsoft_datetimepicker .xdsoft_mounthpicker {
- position: relative;
- text-align: center;
-}
-
-.xdsoft_datetimepicker .xdsoft_label i,
-.xdsoft_datetimepicker .xdsoft_prev,
-.xdsoft_datetimepicker .xdsoft_next,
-.xdsoft_datetimepicker .xdsoft_today_button {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC);
-}
-
-.xdsoft_datetimepicker .xdsoft_label i {
- opacity: 0.5;
- background-position: -92px -19px;
- display: inline-block;
- width: 9px;
- height: 20px;
- vertical-align: middle;
-}
-
-.xdsoft_datetimepicker .xdsoft_prev {
- float: left;
- background-position: -20px 0;
-}
-.xdsoft_datetimepicker .xdsoft_today_button {
- float: left;
- background-position: -70px 0;
- margin-left: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_next {
- float: right;
- background-position: 0 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_next,
-.xdsoft_datetimepicker .xdsoft_prev ,
-.xdsoft_datetimepicker .xdsoft_today_button {
- background-color: transparent;
- background-repeat: no-repeat;
- border: 0 none;
- cursor: pointer;
- display: block;
- height: 30px;
- opacity: 0.5;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- outline: medium none;
- overflow: hidden;
- padding: 0;
- position: relative;
- text-indent: 100%;
- white-space: nowrap;
- width: 20px;
- min-width: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
- float: none;
- background-position: -40px -15px;
- height: 15px;
- width: 30px;
- display: block;
- margin-left: 14px;
- margin-top: 7px;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev,
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next {
- float: none;
- margin-left: 0;
- margin-right: 14px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
- background-position: -40px 0;
- margin-bottom: 7px;
- margin-top: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
- height: 151px;
- overflow: hidden;
- border-bottom: 1px solid #ddd;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div {
- background: #f5f5f5;
- border-top: 1px solid #ddd;
- color: #666;
- font-size: 12px;
- text-align: center;
- border-collapse: collapse;
- cursor: pointer;
- border-bottom-width: 0;
- height: 25px;
- line-height: 25px;
-}
-
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child {
- border-top-width: 0;
-}
-
-.xdsoft_datetimepicker .xdsoft_today_button:hover,
-.xdsoft_datetimepicker .xdsoft_next:hover,
-.xdsoft_datetimepicker .xdsoft_prev:hover {
- opacity: 1;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
-}
-
-.xdsoft_datetimepicker .xdsoft_label {
- display: inline;
- position: relative;
- z-index: 9999;
- margin: 0;
- padding: 5px 3px;
- font-size: 14px;
- line-height: 20px;
- font-weight: bold;
- background-color: #fff;
- float: left;
- width: 182px;
- text-align: center;
- cursor: pointer;
-}
-
-.xdsoft_datetimepicker .xdsoft_label:hover>span {
- text-decoration: underline;
-}
-
-.xdsoft_datetimepicker .xdsoft_label:hover i {
- opacity: 1.0;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
- border: 1px solid #ccc;
- position: absolute;
- right: 0;
- top: 30px;
- z-index: 101;
- display: none;
- background: #fff;
- max-height: 160px;
- overflow-y: hidden;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px }
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px }
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
- color: #fff;
- background: #ff8000;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
- padding: 2px 10px 2px 5px;
- text-decoration: none !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
- background: #33aaff;
- box-shadow: #178fe5 0 1px 3px 0 inset;
- color: #fff;
- font-weight: 700;
-}
-
-.xdsoft_datetimepicker .xdsoft_month {
- width: 100px;
- text-align: right;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar {
- clear: both;
-}
-
-.xdsoft_datetimepicker .xdsoft_year{
- width: 48px;
- margin-left: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar table {
- border-collapse: collapse;
- width: 100%;
-
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td > div {
- padding-right: 5px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- height: 25px;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th {
- width: 14.2857142%;
- background: #f5f5f5;
- border: 1px solid #ddd;
- color: #666;
- font-size: 12px;
- text-align: right;
- vertical-align: middle;
- padding: 0;
- border-collapse: collapse;
- cursor: pointer;
- height: 25px;
-}
-.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th {
- width: 12.5%;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- background: #f1f1f1;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
- color: #33aaff;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default {
- background: #ffe9d2;
- box-shadow: #ffb871 0 1px 4px 0 inset;
- color: #000;
-}
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint {
- background: #c1ffc9;
- box-shadow: #00dd1c 0 1px 4px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
- background: #33aaff;
- box-shadow: #178fe5 0 1px 3px 0 inset;
- color: #fff;
- font-weight: 700;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
-.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled {
- opacity: 0.5;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- cursor: default;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
- opacity: 0.2;
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
- color: #fff !important;
- background: #ff8000 !important;
- box-shadow: none !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover {
- background: #33aaff !important;
- box-shadow: #178fe5 0 1px 3px 0 inset !important;
- color: #fff !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
-.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover {
- color: inherit !important;
- background: inherit !important;
- box-shadow: inherit !important;
-}
-
-.xdsoft_datetimepicker .xdsoft_calendar th {
- font-weight: 700;
- text-align: center;
- color: #999;
- cursor: default;
-}
-
-.xdsoft_datetimepicker .xdsoft_copyright {
- color: #ccc !important;
- font-size: 10px;
- clear: both;
- float: none;
- margin-left: 8px;
-}
-
-.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important }
-.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important }
-
-.xdsoft_time_box {
- position: relative;
- border: 1px solid #ccc;
-}
-.xdsoft_scrollbar >.xdsoft_scroller {
- background: #ccc !important;
- height: 20px;
- border-radius: 3px;
-}
-.xdsoft_scrollbar {
- position: absolute;
- width: 7px;
- right: 0;
- top: 0;
- bottom: 0;
- cursor: pointer;
-}
-.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar {
- left: 0;
- right: auto;
-}
-.xdsoft_scroller_box {
- position: relative;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark {
- box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506);
- background: #000;
- border-bottom: 1px solid #444;
- border-left: 1px solid #333;
- border-right: 1px solid #333;
- border-top: 1px solid #333;
- color: #ccc;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box {
- border-bottom: 1px solid #222;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div {
- background: #0a0a0a;
- border-top: 1px solid #222;
- color: #999;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label {
- background-color: #000;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select {
- border: 1px solid #333;
- background: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
- color: #000;
- background: #007fff;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
- background: #cc5500;
- box-shadow: #b03e00 0 1px 3px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==);
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- background: #0a0a0a;
- border: 1px solid #222;
- color: #999;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- background: #0e0e0e;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today {
- color: #cc5500;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default {
- background: #ffe9d2;
- box-shadow: #ffb871 0 1px 4px 0 inset;
- color:#000;
-}
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint {
- background: #c1ffc9;
- box-shadow: #00dd1c 0 1px 4px 0 inset;
- color:#000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
- background: #cc5500;
- box-shadow: #b03e00 0 1px 3px 0 inset;
- color: #000;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
- color: #000 !important;
- background: #007fff !important;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
- color: #666;
-}
-
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important }
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important }
-.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important }
-
-.xdsoft_dark .xdsoft_time_box {
- border: 1px solid #333;
-}
-
-.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller {
- background: #333 !important;
-}
-.xdsoft_datetimepicker .xdsoft_save_selected {
- display: block;
- border: 1px solid #dddddd !important;
- margin-top: 5px;
- width: 100%;
- color: #454551;
- font-size: 13px;
-}
-.xdsoft_datetimepicker .blue-gradient-button {
- font-family: "museo-sans", "Book Antiqua", sans-serif;
- font-size: 12px;
- font-weight: 300;
- color: #82878c;
- height: 28px;
- position: relative;
- padding: 4px 17px 4px 33px;
- border: 1px solid #d7d8da;
- background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%);
- /* IE10+ */
- background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%);
- /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 );
-/* IE6-9 */
-}
-.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span {
- color: #454551;
- background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
- /* IE10+ */
- background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%);
- /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 );
- /* IE6-9 */
-}
diff --git a/web/nms.gathering.org/css/navbar-static-top.css b/web/nms.gathering.org/css/navbar-static-top.css
deleted file mode 100644
index bf6b28e..0000000
--- a/web/nms.gathering.org/css/navbar-static-top.css
+++ /dev/null
@@ -1,4 +0,0 @@
-
-.navbar-static-top {
- margin-bottom: 19px;
-}
diff --git a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot
deleted file mode 100644
index b93a495..0000000
--- a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.eot
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg
deleted file mode 100644
index 94fb549..0000000
--- a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
-<font-face units-per-em="1200" ascent="960" descent="-240" />
-<missing-glyph horiz-adv-x="500" />
-<glyph horiz-adv-x="0" />
-<glyph horiz-adv-x="400" />
-<glyph unicode=" " />
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xa0;" />
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 1413fc6..0000000
--- a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.ttf
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff
deleted file mode 100644
index 9e61285..0000000
--- a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2 b/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b5..0000000
--- a/web/nms.gathering.org/fonts/glyphicons-halflings-regular.woff2
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/img/tg15-salkart-clean-big.png b/web/nms.gathering.org/img/tg15-salkart-clean-big.png
deleted file mode 100644
index 8d647a3..0000000
--- a/web/nms.gathering.org/img/tg15-salkart-clean-big.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/img/tg15-salkart-full.png b/web/nms.gathering.org/img/tg15-salkart-full.png
deleted file mode 100644
index 9e22d40..0000000
--- a/web/nms.gathering.org/img/tg15-salkart-full.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/img/tg15-salkart.png b/web/nms.gathering.org/img/tg15-salkart.png
deleted file mode 100644
index dce49b5..0000000
--- a/web/nms.gathering.org/img/tg15-salkart.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/img/tg16-salkart-clean-big.png b/web/nms.gathering.org/img/tg16-salkart-clean-big.png
deleted file mode 100644
index 400cd64..0000000
--- a/web/nms.gathering.org/img/tg16-salkart-clean-big.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/img/tg16-salkart-full.png b/web/nms.gathering.org/img/tg16-salkart-full.png
deleted file mode 100644
index 6fe9d68..0000000
--- a/web/nms.gathering.org/img/tg16-salkart-full.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html
deleted file mode 100644
index 4077e4e..0000000
--- a/web/nms.gathering.org/index.html
+++ /dev/null
@@ -1,337 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
- <meta name="description" content="">
- <meta name="author" content="">
- <link rel="icon" href="../../favicon.ico">
-
- <title>NMS2</title>
-
- <!-- Bootstrap core CSS -->
- <link href="css/bootstrap.min.css" rel="stylesheet">
-
- <!-- Custom styles for this template -->
- <link href="css/navbar-static-top.css" rel="stylesheet">
-
- <!-- Date-picker styles -->
- <link href="css/jquery.datetimepicker.css" rel="stylesheet">
-
- <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
- <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
- <![endif]-->
- <style type="text/css">
- canvas {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- outline: none;
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
- }
- tr.mgmt_v4_addr {
- font-weight: 700;
- }
- h1.map-mode-title {
- font-weight: 700;
- font-size: 55px;
- color: black;
- display: none;
- z-index: 999;
- }
- .vertical h1.map-mode-title {
- left: 30px;
- bottom: 0px;
- position: absolute;
- transform-origin: 0px 0% 0px;
- transform: rotate(-90deg);
- }
- .tvmode h1.map-mode-title {
- display: block;
- }
- .nightmode h1.map-mode-title {
- color: white;
- }
- .tvmode #topCanvas {
- display: none;
- }
- div.map-mode-legend {
- display: none;
- position: fixed;
- bottom: 5%;
- right: 5%;
- z-index: 999;
- }
- .vertical div.map-mode-legend {
- top: -10px;
- right: 30px;
- position: absolute;
- transform-origin: 100% 100% 0;
- transform: rotate(-90deg);
- height: 40px;
- }
- div.map-mode-legend button {
- font-size: 20px;
- font-weight: 700;
- }
- .tvmode div.map-mode-legend {
- display: block;
- }
- </style>
- </head>
-
- <body id="body">
- <nav class="navbar navbar-default navbar-static-top">
- <div class="container-fluid">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- </div>
- <div id="navbar" class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
- <span class="caret"></span>
- </a>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
- <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
- <li><a href="#dhcp" onclick="setUpdater(handler_dhcp)">DHCP map</a></li>
- <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
- <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
- <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
- <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
- <li><a href="#snmp" onclick="setUpdater(handler_snmp)">SNMP map</a></li>
- <li><a href="#cpu" onclick="setUpdater(handler_cpu)">CPU map</a></li>
- <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
- <li class="divider"> </li>
- <li><a href="#" onclick="toggleLayer('nowPickerBox');startNowPicker();">Travel in time</a></li>
- <li><a href="#" onclick="nms.playback.startReplay('2016-03-21T09:00:00','2016-03-27T12:00:00');" title="Replay from opening 120 minutes per second">Replay TG</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">View</li>
- <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
- <li><a href="#" onclick="toggleConnect()">Toggle linknets</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Switches</li>
- <li><a href="#" onclick="nmsMap.moveSet(true);">Enable switch moving</a></li>
- <li><a href="#" onclick="nmsMap.moveSet(false);">Disable switch moving</a></li>
- <li><a href="#" onclick="nmsInfoBox.showWindow('addSwitch')">Add switch</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Inventory lists</li>
- <li><a href="#" onclick="nmsInfoBox.showWindow('inventoryListing','distro_name');">Distro names</a></li>
- <li><a href="#" onclick="nmsInfoBox.showWindow('inventoryListing','sysDescr')">System description</a></li>
- <li><a href="#" onclick="nmsInfoBox.showWindow('inventoryListing','jnxBoxSerialNo')">Serial Numbers</a></li>
- <li class="divider"> </li>
- <li class="dropdown-header">Help</li>
- <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
- </ul>
- </li>
- <li><p id="updater_name" class="navbar-text"></p></li>
- <div class="navbar-form navbar-left">
- <div class="form-group">
- <button class="btn btn-default btn-sm" id="legend-1"></button>
- <button class="btn btn-default btn-sm" id="legend-2"></button>
- <button class="btn btn-default btn-sm" id="legend-3"></button>
- <button class="btn btn-default btn-sm" id="legend-4"></button>
- <button class="btn btn-default btn-sm" id="legend-5"></button>
- </div>
- <div class="input-group input-group-sm">
- <input id="searchbox" type="text" class="form-control" placeholder="Filter" oninput="nmsInfoBox._search()" />
- <span class="input-group-btn">
- <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button>
- </span>
- </div>
- </div>
- </li>
- </ul>
- <ul class="nav navbar-nav navbar-right">
- <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li>
- </ul>
- </div><!--/.nav-collapse -->
- </div>
- </nav>
-
- <div class="container-fluid" id="wrap">
-
- <div class="row-fluid">
- <div class="span12">
- <div id="aboutKeybindings" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Keyboard Shortcuts
- <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutKeybindings').style.display = 'none';" style="float: right">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <table class="table table-condensed">
- <tr>
- <th>Key</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>?</td>
- <td>Toggle this help window</td>
- </tr>
- <tr>
- <td>-</td>
- <td>Toggle navigation bar</td>
- </tr>
- <tr>
- <td>n</td>
- <td>Toggle night mode</td>
- </tr>
- <tr>
- <td>1</td>
- <td>View Ping map</td>
- </tr>
- <tr>
- <td>2</td>
- <td>View uplink map</td>
- </tr>
- <tr>
- <td>3</td>
- <td>View DHCP map</td>
- </tr>
- <tr>
- <td>4</td>
- <td>View comment spotter map</td>
- </tr>
- <tr>
- <td>5</td>
- <td>View temperature map</td>
- </tr>
- <tr>
- <td>6</td>
- <td>View uplink traffic map</td>
- </tr>
- <tr>
- <td>7</td>
- <td>View total switch traffic map</td>
- </tr>
- <tr>
- <td>8</td>
- <td>View SNMP map</td>
- </tr>
- <tr>
- <td>9</td>
- <td>View Disco map</td>
- </tr>
- <tr>
- <td>c</td>
- <td>Toggle linknet connections</td>
- </tr>
- <tr>
- <td>h</td>
- <td>Step 1 hour back in time</td>
- </tr>
- <tr>
- <td>j</td>
- <td>Step 5 minutes back in time</td>
- </tr>
- <tr>
- <td>k</td>
- <td>Step 5 minutes forward in time</td>
- </tr>
- <tr>
- <td>l</td>
- <td>Step 1 hour forward in time</td>
- </tr>
- <tr>
- <td>p</td>
- <td>Toggle playback (1 hour per second)</td>
- </tr>
- <tr>
- <td>r</td>
- <td>Return to real time</td>
- </tr>
- </table>
- </div>
- </div>
- <div id="nowPickerBox" style="position: absolute; display: none; z-index: 130;" class="col-sm-6 col-md-5">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h3 class="panel-title">Time travel
- <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('nowPickerBox').style.display = 'none';" style="float: right;">
- <span aria-hidden="true">&times;</span>
- </button>
- </h3>
- </div>
- <div class="panel-body row">
- <div class="col-sm-12">
- <div class="form-group">
- <input type="text" class="form-control" placeholder="YYYY-MM-DDThh:mm:ss" id="nowPicker">
- <div class="button-group">
- <button class="btn btn-primary" onclick="nms.playback.setNow(document.getElementById('nowPicker').dataset.iso);hideLayer('nowPickerBox');">Travel</button>
- <button class="btn btn-danger" onclick="startNowPicker(Date.now());nms.playback.setNow(false);nms.playback.play();">Back to reality</button>
- <button class="btn btn-info" data-toggle="button" onclick="toggleLayer('nowPickerInfo');">Info</button>
- </div>
- </div>
- </div>
- <div id="nowPickerInfo" class="col-sm-12" style="display:none;">
- <p>Some features do not have time travel support (comment
- spotting and DHCP map at the moment). We also lack
- compatible SNMP data for the first day or so, so you'll
- only have ping data for the first day of TG15.</p>
- <p>It could take some time to load a specific point in time
- for the first time. See "About performance" under the help
- menu for more information.</p>
- <p>You can also step backwards and forwards in time, stop
- and start replay and go back to real time using keyboard
- shortcuts. See the help menu for an overview of keyboard
- shortcuts.</p>
- </div>
- </div>
- </div>
- </div>
- <div id="info-box-container" class="col-md-5 hidden" style="position: absolute; z-index: 120;">
- </div>
- </div>
-
- <h1 id="map-mode-title" class="map-mode-title"></h1>
- <div class="map-mode-legend form-group">
- <button class="btn btn-default btn-sm" id="tv-mode-legend-1"></button>
- <button class="btn btn-default btn-sm" id="tv-mode-legend-2"></button>
- <button class="btn btn-default btn-sm" id="tv-mode-legend-3"></button>
- <button class="btn btn-default btn-sm" id="tv-mode-legend-4"></button>
- <button class="btn btn-default btn-sm" id="tv-mode-legend-5"></button>
- </div>
- <canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
- <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10; display: none;"> </canvas>
- <canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
- <canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
- <canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
- <canvas id="textInfoCanvas" width="1920" height="1032" style="position: absolute; z-index: 45;"> </canvas>
- <canvas id="topCanvas" width="1920" height="1032" style="position: absolute; z-index: 50;"> </canvas>
- <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onmousedown="nmsMap.canvasClick(event)">
- </canvas>
- <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
-
- <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div>
- </div>
- </div><!--/.fluid-container-->
- <script src="js/jquery.min.js" type="text/javascript"></script>
- <script src="js/bootstrap.min.js" type="text/javascript"></script>
- <script type="text/javascript" src="js/nms-data.js"></script>
- <script type="text/javascript" src="js/nms-map.js"></script>
- <script type="text/javascript" src="js/nms-info-box.js"></script>
- <script type="text/javascript" src="js/nms.js"></script>
- <script type="text/javascript" src="js/nms-color-util.js"></script>
- <script type="text/javascript" src="js/nms-map-handlers.js"></script>
- <script src="js/jquery.datetimepicker.full.js" type="text/javascript"></script>
- <script type="text/javascript">
-initNMS();
- </script>
- </body>
-</html>
diff --git a/web/nms.gathering.org/js/bootstrap.js b/web/nms.gathering.org/js/bootstrap.js
deleted file mode 100644
index 1c88b71..0000000
--- a/web/nms.gathering.org/js/bootstrap.js
+++ /dev/null
@@ -1,2317 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-if (typeof jQuery === 'undefined') {
- throw new Error('Bootstrap\'s JavaScript requires jQuery')
-}
-
-+function ($) {
- 'use strict';
- var version = $.fn.jquery.split(' ')[0].split('.')
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
- }
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: transition.js v3.3.4
- * http://getbootstrap.com/javascript/#transitions
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
- // ============================================================
-
- function transitionEnd() {
- var el = document.createElement('bootstrap')
-
- var transEndEventNames = {
- WebkitTransition : 'webkitTransitionEnd',
- MozTransition : 'transitionend',
- OTransition : 'oTransitionEnd otransitionend',
- transition : 'transitionend'
- }
-
- for (var name in transEndEventNames) {
- if (el.style[name] !== undefined) {
- return { end: transEndEventNames[name] }
- }
- }
-
- return false // explicit for ie8 ( ._.)
- }
-
- // http://blog.alexmaccaw.com/css-transitions
- $.fn.emulateTransitionEnd = function (duration) {
- var called = false
- var $el = this
- $(this).one('bsTransitionEnd', function () { called = true })
- var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
- setTimeout(callback, duration)
- return this
- }
-
- $(function () {
- $.support.transition = transitionEnd()
-
- if (!$.support.transition) return
-
- $.event.special.bsTransitionEnd = {
- bindType: $.support.transition.end,
- delegateType: $.support.transition.end,
- handle: function (e) {
- if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
- }
- }
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: alert.js v3.3.4
- * http://getbootstrap.com/javascript/#alerts
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // ALERT CLASS DEFINITION
- // ======================
-
- var dismiss = '[data-dismiss="alert"]'
- var Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.VERSION = '3.3.4'
-
- Alert.TRANSITION_DURATION = 150
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = $(selector)
-
- if (e) e.preventDefault()
-
- if (!$parent.length) {
- $parent = $this.closest('.alert')
- }
-
- $parent.trigger(e = $.Event('close.bs.alert'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- // detach from parent, fire event then clean up data
- $parent.detach().trigger('closed.bs.alert').remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent
- .one('bsTransitionEnd', removeElement)
- .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
- removeElement()
- }
-
-
- // ALERT PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.alert')
-
- if (!data) $this.data('bs.alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.alert
-
- $.fn.alert = Plugin
- $.fn.alert.Constructor = Alert
-
-
- // ALERT NO CONFLICT
- // =================
-
- $.fn.alert.noConflict = function () {
- $.fn.alert = old
- return this
- }
-
-
- // ALERT DATA-API
- // ==============
-
- $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: button.js v3.3.4
- * http://getbootstrap.com/javascript/#buttons
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // BUTTON PUBLIC CLASS DEFINITION
- // ==============================
-
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Button.DEFAULTS, options)
- this.isLoading = false
- }
-
- Button.VERSION = '3.3.4'
-
- Button.DEFAULTS = {
- loadingText: 'loading...'
- }
-
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- var $el = this.$element
- var val = $el.is('input') ? 'val' : 'html'
- var data = $el.data()
-
- state = state + 'Text'
-
- if (data.resetText == null) $el.data('resetText', $el[val]())
-
- // push to event loop to allow forms to submit
- setTimeout($.proxy(function () {
- $el[val](data[state] == null ? this.options[state] : data[state])
-
- if (state == 'loadingText') {
- this.isLoading = true
- $el.addClass(d).attr(d, d)
- } else if (this.isLoading) {
- this.isLoading = false
- $el.removeClass(d).removeAttr(d)
- }
- }, this), 0)
- }
-
- Button.prototype.toggle = function () {
- var changed = true
- var $parent = this.$element.closest('[data-toggle="buttons"]')
-
- if ($parent.length) {
- var $input = this.$element.find('input')
- if ($input.prop('type') == 'radio') {
- if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
- else $parent.find('.active').removeClass('active')
- }
- if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
- } else {
- this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
- }
-
- if (changed) this.$element.toggleClass('active')
- }
-
-
- // BUTTON PLUGIN DEFINITION
- // ========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.button')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.button', (data = new Button(this, options)))
-
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- var old = $.fn.button
-
- $.fn.button = Plugin
- $.fn.button.Constructor = Button
-
-
- // BUTTON NO CONFLICT
- // ==================
-
- $.fn.button.noConflict = function () {
- $.fn.button = old
- return this
- }
-
-
- // BUTTON DATA-API
- // ===============
-
- $(document)
- .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- Plugin.call($btn, 'toggle')
- e.preventDefault()
- })
- .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: carousel.js v3.3.4
- * http://getbootstrap.com/javascript/#carousel
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // CAROUSEL CLASS DEFINITION
- // =========================
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.$indicators = this.$element.find('.carousel-indicators')
- this.options = options
- this.paused = null
- this.sliding = null
- this.interval = null
- this.$active = null
- this.$items = null
-
- this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
-
- this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
- .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
- .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
- }
-
- Carousel.VERSION = '3.3.4'
-
- Carousel.TRANSITION_DURATION = 600
-
- Carousel.DEFAULTS = {
- interval: 5000,
- pause: 'hover',
- wrap: true,
- keyboard: true
- }
-
- Carousel.prototype.keydown = function (e) {
- if (/input|textarea/i.test(e.target.tagName)) return
- switch (e.which) {
- case 37: this.prev(); break
- case 39: this.next(); break
- default: return
- }
-
- e.preventDefault()
- }
-
- Carousel.prototype.cycle = function (e) {
- e || (this.paused = false)
-
- this.interval && clearInterval(this.interval)
-
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-
- return this
- }
-
- Carousel.prototype.getItemIndex = function (item) {
- this.$items = item.parent().children('.item')
- return this.$items.index(item || this.$active)
- }
-
- Carousel.prototype.getItemForDirection = function (direction, active) {
- var activeIndex = this.getItemIndex(active)
- var willWrap = (direction == 'prev' && activeIndex === 0)
- || (direction == 'next' && activeIndex == (this.$items.length - 1))
- if (willWrap && !this.options.wrap) return active
- var delta = direction == 'prev' ? -1 : 1
- var itemIndex = (activeIndex + delta) % this.$items.length
- return this.$items.eq(itemIndex)
- }
-
- Carousel.prototype.to = function (pos) {
- var that = this
- var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
-
- if (pos > (this.$items.length - 1) || pos < 0) return
-
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
- if (activeIndex == pos) return this.pause().cycle()
-
- return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
- }
-
- Carousel.prototype.pause = function (e) {
- e || (this.paused = true)
-
- if (this.$element.find('.next, .prev').length && $.support.transition) {
- this.$element.trigger($.support.transition.end)
- this.cycle(true)
- }
-
- this.interval = clearInterval(this.interval)
-
- return this
- }
-
- Carousel.prototype.next = function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- Carousel.prototype.prev = function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- Carousel.prototype.slide = function (type, next) {
- var $active = this.$element.find('.item.active')
- var $next = next || this.getItemForDirection(type, $active)
- var isCycling = this.interval
- var direction = type == 'next' ? 'left' : 'right'
- var that = this
-
- if ($next.hasClass('active')) return (this.sliding = false)
-
- var relatedTarget = $next[0]
- var slideEvent = $.Event('slide.bs.carousel', {
- relatedTarget: relatedTarget,
- direction: direction
- })
- this.$element.trigger(slideEvent)
- if (slideEvent.isDefaultPrevented()) return
-
- this.sliding = true
-
- isCycling && this.pause()
-
- if (this.$indicators.length) {
- this.$indicators.find('.active').removeClass('active')
- var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
- $nextIndicator && $nextIndicator.addClass('active')
- }
-
- var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
- if ($.support.transition && this.$element.hasClass('slide')) {
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- $active
- .one('bsTransitionEnd', function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () {
- that.$element.trigger(slidEvent)
- }, 0)
- })
- .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
- } else {
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger(slidEvent)
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
-
- // CAROUSEL PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.carousel')
- var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
- var action = typeof option == 'string' ? option : options.slide
-
- if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.pause().cycle()
- })
- }
-
- var old = $.fn.carousel
-
- $.fn.carousel = Plugin
- $.fn.carousel.Constructor = Carousel
-
-
- // CAROUSEL NO CONFLICT
- // ====================
-
- $.fn.carousel.noConflict = function () {
- $.fn.carousel = old
- return this
- }
-
-
- // CAROUSEL DATA-API
- // =================
-
- var clickHandler = function (e) {
- var href
- var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
- if (!$target.hasClass('carousel')) return
- var options = $.extend({}, $target.data(), $this.data())
- var slideIndex = $this.attr('data-slide-to')
- if (slideIndex) options.interval = false
-
- Plugin.call($target, options)
-
- if (slideIndex) {
- $target.data('bs.carousel').to(slideIndex)
- }
-
- e.preventDefault()
- }
-
- $(document)
- .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
- .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
-
- $(window).on('load', function () {
- $('[data-ride="carousel"]').each(function () {
- var $carousel = $(this)
- Plugin.call($carousel, $carousel.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: collapse.js v3.3.4
- * http://getbootstrap.com/javascript/#collapse
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // COLLAPSE PUBLIC CLASS DEFINITION
- // ================================
-
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, Collapse.DEFAULTS, options)
- this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
- '[data-toggle="collapse"][data-target="#' + element.id + '"]')
- this.transitioning = null
-
- if (this.options.parent) {
- this.$parent = this.getParent()
- } else {
- this.addAriaAndCollapsedClass(this.$element, this.$trigger)
- }
-
- if (this.options.toggle) this.toggle()
- }
-
- Collapse.VERSION = '3.3.4'
-
- Collapse.TRANSITION_DURATION = 350
-
- Collapse.DEFAULTS = {
- toggle: true
- }
-
- Collapse.prototype.dimension = function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- Collapse.prototype.show = function () {
- if (this.transitioning || this.$element.hasClass('in')) return
-
- var activesData
- var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
-
- if (actives && actives.length) {
- activesData = actives.data('bs.collapse')
- if (activesData && activesData.transitioning) return
- }
-
- var startEvent = $.Event('show.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- if (actives && actives.length) {
- Plugin.call(actives, 'hide')
- activesData || actives.data('bs.collapse', null)
- }
-
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- .addClass('collapsing')[dimension](0)
- .attr('aria-expanded', true)
-
- this.$trigger
- .removeClass('collapsed')
- .attr('aria-expanded', true)
-
- this.transitioning = 1
-
- var complete = function () {
- this.$element
- .removeClass('collapsing')
- .addClass('collapse in')[dimension]('')
- this.transitioning = 0
- this.$element
- .trigger('shown.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- var scrollSize = $.camelCase(['scroll', dimension].join('-'))
-
- this.$element
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
- }
-
- Collapse.prototype.hide = function () {
- if (this.transitioning || !this.$element.hasClass('in')) return
-
- var startEvent = $.Event('hide.bs.collapse')
- this.$element.trigger(startEvent)
- if (startEvent.isDefaultPrevented()) return
-
- var dimension = this.dimension()
-
- this.$element[dimension](this.$element[dimension]())[0].offsetHeight
-
- this.$element
- .addClass('collapsing')
- .removeClass('collapse in')
- .attr('aria-expanded', false)
-
- this.$trigger
- .addClass('collapsed')
- .attr('aria-expanded', false)
-
- this.transitioning = 1
-
- var complete = function () {
- this.transitioning = 0
- this.$element
- .removeClass('collapsing')
- .addClass('collapse')
- .trigger('hidden.bs.collapse')
- }
-
- if (!$.support.transition) return complete.call(this)
-
- this.$element
- [dimension](0)
- .one('bsTransitionEnd', $.proxy(complete, this))
- .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
- }
-
- Collapse.prototype.toggle = function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- Collapse.prototype.getParent = function () {
- return $(this.options.parent)
- .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
- .each($.proxy(function (i, element) {
- var $element = $(element)
- this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
- }, this))
- .end()
- }
-
- Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
- var isOpen = $element.hasClass('in')
-
- $element.attr('aria-expanded', isOpen)
- $trigger
- .toggleClass('collapsed', !isOpen)
- .attr('aria-expanded', isOpen)
- }
-
- function getTargetFromTrigger($trigger) {
- var href
- var target = $trigger.attr('data-target')
- || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
-
- return $(target)
- }
-
-
- // COLLAPSE PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.collapse')
- var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
- if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.collapse
-
- $.fn.collapse = Plugin
- $.fn.collapse.Constructor = Collapse
-
-
- // COLLAPSE NO CONFLICT
- // ====================
-
- $.fn.collapse.noConflict = function () {
- $.fn.collapse = old
- return this
- }
-
-
- // COLLAPSE DATA-API
- // =================
-
- $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
- var $this = $(this)
-
- if (!$this.attr('data-target')) e.preventDefault()
-
- var $target = getTargetFromTrigger($this)
- var data = $target.data('bs.collapse')
- var option = data ? 'toggle' : $this.data()
-
- Plugin.call($target, option)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: dropdown.js v3.3.4
- * http://getbootstrap.com/javascript/#dropdowns
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // DROPDOWN CLASS DEFINITION
- // =========================
-
- var backdrop = '.dropdown-backdrop'
- var toggle = '[data-toggle="dropdown"]'
- var Dropdown = function (element) {
- $(element).on('click.bs.dropdown', this.toggle)
- }
-
- Dropdown.VERSION = '3.3.4'
-
- Dropdown.prototype.toggle = function (e) {
- var $this = $(this)
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
- // if mobile we use a backdrop because click events don't delegate
- $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
- }
-
- var relatedTarget = { relatedTarget: this }
- $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this
- .trigger('focus')
- .attr('aria-expanded', 'true')
-
- $parent
- .toggleClass('open')
- .trigger('shown.bs.dropdown', relatedTarget)
- }
-
- return false
- }
-
- Dropdown.prototype.keydown = function (e) {
- if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
-
- var $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- var $parent = getParent($this)
- var isActive = $parent.hasClass('open')
-
- if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
- if (e.which == 27) $parent.find(toggle).trigger('focus')
- return $this.trigger('click')
- }
-
- var desc = ' li:not(.disabled):visible a'
- var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
-
- if (!$items.length) return
-
- var index = $items.index(e.target)
-
- if (e.which == 38 && index > 0) index-- // up
- if (e.which == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items.eq(index).trigger('focus')
- }
-
- function clearMenus(e) {
- if (e && e.which === 3) return
- $(backdrop).remove()
- $(toggle).each(function () {
- var $this = $(this)
- var $parent = getParent($this)
- var relatedTarget = { relatedTarget: this }
-
- if (!$parent.hasClass('open')) return
-
- $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-
- if (e.isDefaultPrevented()) return
-
- $this.attr('aria-expanded', 'false')
- $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
- })
- }
-
- function getParent($this) {
- var selector = $this.attr('data-target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- var $parent = selector && $(selector)
-
- return $parent && $parent.length ? $parent : $this.parent()
- }
-
-
- // DROPDOWN PLUGIN DEFINITION
- // ==========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.dropdown')
-
- if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- var old = $.fn.dropdown
-
- $.fn.dropdown = Plugin
- $.fn.dropdown.Constructor = Dropdown
-
-
- // DROPDOWN NO CONFLICT
- // ====================
-
- $.fn.dropdown.noConflict = function () {
- $.fn.dropdown = old
- return this
- }
-
-
- // APPLY TO STANDARD DROPDOWN ELEMENTS
- // ===================================
-
- $(document)
- .on('click.bs.dropdown.data-api', clearMenus)
- .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
- .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
- .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: modal.js v3.3.4
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // MODAL CLASS DEFINITION
- // ======================
-
- var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$dialog = this.$element.find('.modal-dialog')
- this.$backdrop = null
- this.isShown = null
- this.originalBodyPad = null
- this.scrollbarWidth = 0
- this.ignoreBackdropClick = false
-
- if (this.options.remote) {
- this.$element
- .find('.modal-content')
- .load(this.options.remote, $.proxy(function () {
- this.$element.trigger('loaded.bs.modal')
- }, this))
- }
- }
-
- Modal.VERSION = '3.3.4'
-
- Modal.TRANSITION_DURATION = 300
- Modal.BACKDROP_TRANSITION_DURATION = 150
-
- Modal.DEFAULTS = {
- backdrop: true,
- keyboard: true,
- show: true
- }
-
- Modal.prototype.toggle = function (_relatedTarget) {
- return this.isShown ? this.hide() : this.show(_relatedTarget)
- }
-
- Modal.prototype.show = function (_relatedTarget) {
- var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = true
-
- this.checkScrollbar()
- this.setScrollbar()
- this.$body.addClass('modal-open')
-
- this.escape()
- this.resize()
-
- this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
-
- this.$dialog.on('mousedown.dismiss.bs.modal', function () {
- that.$element.one('mouseup.dismiss.bs.modal', function (e) {
- if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
- })
- })
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(that.$body) // don't move modals dom position
- }
-
- that.$element
- .show()
- .scrollTop(0)
-
- that.adjustDialog()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
-
- that.enforceFocus()
-
- var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
-
- transition ?
- that.$dialog // wait for modal to slide in
- .one('bsTransitionEnd', function () {
- that.$element.trigger('focus').trigger(e)
- })
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- that.$element.trigger('focus').trigger(e)
- })
- }
-
- Modal.prototype.hide = function (e) {
- if (e) e.preventDefault()
-
- e = $.Event('hide.bs.modal')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- this.escape()
- this.resize()
-
- $(document).off('focusin.bs.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
- .off('click.dismiss.bs.modal')
- .off('mouseup.dismiss.bs.modal')
-
- this.$dialog.off('mousedown.dismiss.bs.modal')
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.$element
- .one('bsTransitionEnd', $.proxy(this.hideModal, this))
- .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
- this.hideModal()
- }
-
- Modal.prototype.enforceFocus = function () {
- $(document)
- .off('focusin.bs.modal') // guard against infinite focus loop
- .on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
- this.$element.trigger('focus')
- }
- }, this))
- }
-
- Modal.prototype.escape = function () {
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
- e.which == 27 && this.hide()
- }, this))
- } else if (!this.isShown) {
- this.$element.off('keydown.dismiss.bs.modal')
- }
- }
-
- Modal.prototype.resize = function () {
- if (this.isShown) {
- $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
- } else {
- $(window).off('resize.bs.modal')
- }
- }
-
- Modal.prototype.hideModal = function () {
- var that = this
- this.$element.hide()
- this.backdrop(function () {
- that.$body.removeClass('modal-open')
- that.resetAdjustments()
- that.resetScrollbar()
- that.$element.trigger('hidden.bs.modal')
- })
- }
-
- Modal.prototype.removeBackdrop = function () {
- this.$backdrop && this.$backdrop.remove()
- this.$backdrop = null
- }
-
- Modal.prototype.backdrop = function (callback) {
- var that = this
- var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(this.$body)
-
- this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
- if (this.ignoreBackdropClick) {
- this.ignoreBackdropClick = false
- return
- }
- if (e.target !== e.currentTarget) return
- this.options.backdrop == 'static'
- ? this.$element[0].focus()
- : this.hide()
- }, this))
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- if (!callback) return
-
- doAnimate ?
- this.$backdrop
- .one('bsTransitionEnd', callback)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- var callbackRemove = function () {
- that.removeBackdrop()
- callback && callback()
- }
- $.support.transition && this.$element.hasClass('fade') ?
- this.$backdrop
- .one('bsTransitionEnd', callbackRemove)
- .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
- callbackRemove()
-
- } else if (callback) {
- callback()
- }
- }
-
- // these following methods are used to handle overflowing modals
-
- Modal.prototype.handleUpdate = function () {
- this.adjustDialog()
- }
-
- Modal.prototype.adjustDialog = function () {
- var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
-
- this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
- paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
- })
- }
-
- Modal.prototype.resetAdjustments = function () {
- this.$element.css({
- paddingLeft: '',
- paddingRight: ''
- })
- }
-
- Modal.prototype.checkScrollbar = function () {
- var fullWindowWidth = window.innerWidth
- if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
- var documentElementRect = document.documentElement.getBoundingClientRect()
- fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
- }
- this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
- this.scrollbarWidth = this.measureScrollbar()
- }
-
- Modal.prototype.setScrollbar = function () {
- var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
- this.originalBodyPad = document.body.style.paddingRight || ''
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
- }
-
- Modal.prototype.resetScrollbar = function () {
- this.$body.css('padding-right', this.originalBodyPad)
- }
-
- Modal.prototype.measureScrollbar = function () { // thx walsh
- var scrollDiv = document.createElement('div')
- scrollDiv.className = 'modal-scrollbar-measure'
- this.$body.append(scrollDiv)
- var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
- this.$body[0].removeChild(scrollDiv)
- return scrollbarWidth
- }
-
-
- // MODAL PLUGIN DEFINITION
- // =======================
-
- function Plugin(option, _relatedTarget) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
- var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
- if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option](_relatedTarget)
- else if (options.show) data.show(_relatedTarget)
- })
- }
-
- var old = $.fn.modal
-
- $.fn.modal = Plugin
- $.fn.modal.Constructor = Modal
-
-
- // MODAL NO CONFLICT
- // =================
-
- $.fn.modal.noConflict = function () {
- $.fn.modal = old
- return this
- }
-
-
- // MODAL DATA-API
- // ==============
-
- $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- if ($this.is('a')) e.preventDefault()
-
- $target.one('show.bs.modal', function (showEvent) {
- if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
- $target.one('hidden.bs.modal', function () {
- $this.is(':visible') && $this.trigger('focus')
- })
- })
- Plugin.call($target, option, this)
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tooltip.js v3.3.4
- * http://getbootstrap.com/javascript/#tooltip
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TOOLTIP PUBLIC CLASS DEFINITION
- // ===============================
-
- var Tooltip = function (element, options) {
- this.type = null
- this.options = null
- this.enabled = null
- this.timeout = null
- this.hoverState = null
- this.$element = null
-
- this.init('tooltip', element, options)
- }
-
- Tooltip.VERSION = '3.3.4'
-
- Tooltip.TRANSITION_DURATION = 150
-
- Tooltip.DEFAULTS = {
- animation: true,
- placement: 'top',
- selector: false,
- template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- container: false,
- viewport: {
- selector: 'body',
- padding: 0
- }
- }
-
- Tooltip.prototype.init = function (type, element, options) {
- this.enabled = true
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
-
- if (this.$element[0] instanceof document.constructor && !this.options.selector) {
- throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
- }
-
- var triggers = this.options.trigger.split(' ')
-
- for (var i = triggers.length; i--;) {
- var trigger = triggers[i]
-
- if (trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (trigger != 'manual') {
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
-
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- Tooltip.prototype.getDefaults = function () {
- return Tooltip.DEFAULTS
- }
-
- Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay,
- hide: options.delay
- }
- }
-
- return options
- }
-
- Tooltip.prototype.getDelegateOptions = function () {
- var options = {}
- var defaults = this.getDefaults()
-
- this._options && $.each(this._options, function (key, value) {
- if (defaults[key] != value) options[key] = value
- })
-
- return options
- }
-
- Tooltip.prototype.enter = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (self && self.$tip && self.$tip.is(':visible')) {
- self.hoverState = 'in'
- return
- }
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'in'
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- Tooltip.prototype.leave = function (obj) {
- var self = obj instanceof this.constructor ?
- obj : $(obj.currentTarget).data('bs.' + this.type)
-
- if (!self) {
- self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
- $(obj.currentTarget).data('bs.' + this.type, self)
- }
-
- clearTimeout(self.timeout)
-
- self.hoverState = 'out'
-
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.timeout = setTimeout(function () {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- Tooltip.prototype.show = function () {
- var e = $.Event('show.bs.' + this.type)
-
- if (this.hasContent() && this.enabled) {
- this.$element.trigger(e)
-
- var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
- if (e.isDefaultPrevented() || !inDom) return
- var that = this
-
- var $tip = this.tip()
-
- var tipId = this.getUID(this.type)
-
- this.setContent()
- $tip.attr('id', tipId)
- this.$element.attr('aria-describedby', tipId)
-
- if (this.options.animation) $tip.addClass('fade')
-
- var placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- var autoToken = /\s?auto?\s?/i
- var autoPlace = autoToken.test(placement)
- if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
-
- $tip
- .detach()
- .css({ top: 0, left: 0, display: 'block' })
- .addClass(placement)
- .data('bs.' + this.type, this)
-
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
-
- var pos = this.getPosition()
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (autoPlace) {
- var orgPlacement = placement
- var $container = this.options.container ? $(this.options.container) : this.$element.parent()
- var containerDim = this.getPosition($container)
-
- placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
- placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
- placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
- placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
- placement
-
- $tip
- .removeClass(orgPlacement)
- .addClass(placement)
- }
-
- var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
-
- this.applyPlacement(calculatedOffset, placement)
-
- var complete = function () {
- var prevHoverState = that.hoverState
- that.$element.trigger('shown.bs.' + that.type)
- that.hoverState = null
-
- if (prevHoverState == 'out') that.leave(that)
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
- }
- }
-
- Tooltip.prototype.applyPlacement = function (offset, placement) {
- var $tip = this.tip()
- var width = $tip[0].offsetWidth
- var height = $tip[0].offsetHeight
-
- // manually read margins because getBoundingClientRect includes difference
- var marginTop = parseInt($tip.css('margin-top'), 10)
- var marginLeft = parseInt($tip.css('margin-left'), 10)
-
- // we must check for NaN for ie 8/9
- if (isNaN(marginTop)) marginTop = 0
- if (isNaN(marginLeft)) marginLeft = 0
-
- offset.top = offset.top + marginTop
- offset.left = offset.left + marginLeft
-
- // $.fn.offset doesn't round pixel values
- // so we use setOffset directly with our own function B-0
- $.offset.setOffset($tip[0], $.extend({
- using: function (props) {
- $tip.css({
- top: Math.round(props.top),
- left: Math.round(props.left)
- })
- }
- }, offset), 0)
-
- $tip.addClass('in')
-
- // check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = $tip[0].offsetWidth
- var actualHeight = $tip[0].offsetHeight
-
- if (placement == 'top' && actualHeight != height) {
- offset.top = offset.top + height - actualHeight
- }
-
- var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
-
- if (delta.left) offset.left += delta.left
- else offset.top += delta.top
-
- var isVertical = /top|bottom/.test(placement)
- var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
-
- $tip.offset(offset)
- this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
- }
-
- Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
- this.arrow()
- .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
- .css(isVertical ? 'top' : 'left', '')
- }
-
- Tooltip.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- Tooltip.prototype.hide = function (callback) {
- var that = this
- var $tip = $(this.$tip)
- var e = $.Event('hide.bs.' + this.type)
-
- function complete() {
- if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
- callback && callback()
- }
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $tip.removeClass('in')
-
- $.support.transition && $tip.hasClass('fade') ?
- $tip
- .one('bsTransitionEnd', complete)
- .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
- complete()
-
- this.hoverState = null
-
- return this
- }
-
- Tooltip.prototype.fixTitle = function () {
- var $e = this.$element
- if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
- }
- }
-
- Tooltip.prototype.hasContent = function () {
- return this.getTitle()
- }
-
- Tooltip.prototype.getPosition = function ($element) {
- $element = $element || this.$element
-
- var el = $element[0]
- var isBody = el.tagName == 'BODY'
-
- var elRect = el.getBoundingClientRect()
- if (elRect.width == null) {
- // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
- elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
- }
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
- var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
- var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
-
- return $.extend({}, elRect, scroll, outerDims, elOffset)
- }
-
- Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
- return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
- placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
- /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
-
- }
-
- Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
- var delta = { top: 0, left: 0 }
- if (!this.$viewport) return delta
-
- var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
- var viewportDimensions = this.getPosition(this.$viewport)
-
- if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
- var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
- if (topEdgeOffset < viewportDimensions.top) { // top overflow
- delta.top = viewportDimensions.top - topEdgeOffset
- } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
- delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
- }
- } else {
- var leftEdgeOffset = pos.left - viewportPadding
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth
- if (leftEdgeOffset < viewportDimensions.left) { // left overflow
- delta.left = viewportDimensions.left - leftEdgeOffset
- } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
- delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
- }
- }
-
- return delta
- }
-
- Tooltip.prototype.getTitle = function () {
- var title
- var $e = this.$element
- var o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- Tooltip.prototype.getUID = function (prefix) {
- do prefix += ~~(Math.random() * 1000000)
- while (document.getElementById(prefix))
- return prefix
- }
-
- Tooltip.prototype.tip = function () {
- return (this.$tip = this.$tip || $(this.options.template))
- }
-
- Tooltip.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
- }
-
- Tooltip.prototype.enable = function () {
- this.enabled = true
- }
-
- Tooltip.prototype.disable = function () {
- this.enabled = false
- }
-
- Tooltip.prototype.toggleEnabled = function () {
- this.enabled = !this.enabled
- }
-
- Tooltip.prototype.toggle = function (e) {
- var self = this
- if (e) {
- self = $(e.currentTarget).data('bs.' + this.type)
- if (!self) {
- self = new this.constructor(e.currentTarget, this.getDelegateOptions())
- $(e.currentTarget).data('bs.' + this.type, self)
- }
- }
-
- self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
- }
-
- Tooltip.prototype.destroy = function () {
- var that = this
- clearTimeout(this.timeout)
- this.hide(function () {
- that.$element.off('.' + that.type).removeData('bs.' + that.type)
- })
- }
-
-
- // TOOLTIP PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tooltip')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tooltip
-
- $.fn.tooltip = Plugin
- $.fn.tooltip.Constructor = Tooltip
-
-
- // TOOLTIP NO CONFLICT
- // ===================
-
- $.fn.tooltip.noConflict = function () {
- $.fn.tooltip = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: popover.js v3.3.4
- * http://getbootstrap.com/javascript/#popovers
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // POPOVER PUBLIC CLASS DEFINITION
- // ===============================
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
- if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
-
- Popover.VERSION = '3.3.4'
-
- Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
- })
-
-
- // NOTE: POPOVER EXTENDS tooltip.js
- // ================================
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
-
- Popover.prototype.constructor = Popover
-
- Popover.prototype.getDefaults = function () {
- return Popover.DEFAULTS
- }
-
- Popover.prototype.setContent = function () {
- var $tip = this.tip()
- var title = this.getTitle()
- var content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
-
- $tip.removeClass('fade top bottom left right in')
-
- // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
- // this manually by checking the contents.
- if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
- }
-
- Popover.prototype.hasContent = function () {
- return this.getTitle() || this.getContent()
- }
-
- Popover.prototype.getContent = function () {
- var $e = this.$element
- var o = this.options
-
- return $e.attr('data-content')
- || (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
- }
-
- Popover.prototype.arrow = function () {
- return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
- }
-
-
- // POPOVER PLUGIN DEFINITION
- // =========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.popover')
- var options = typeof option == 'object' && option
-
- if (!data && /destroy|hide/.test(option)) return
- if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.popover
-
- $.fn.popover = Plugin
- $.fn.popover.Constructor = Popover
-
-
- // POPOVER NO CONFLICT
- // ===================
-
- $.fn.popover.noConflict = function () {
- $.fn.popover = old
- return this
- }
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.4
- * http://getbootstrap.com/javascript/#scrollspy
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // SCROLLSPY CLASS DEFINITION
- // ==========================
-
- function ScrollSpy(element, options) {
- this.$body = $(document.body)
- this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
- this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
- this.selector = (this.options.target || '') + ' .nav li > a'
- this.offsets = []
- this.targets = []
- this.activeTarget = null
- this.scrollHeight = 0
-
- this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
- this.refresh()
- this.process()
- }
-
- ScrollSpy.VERSION = '3.3.4'
-
- ScrollSpy.DEFAULTS = {
- offset: 10
- }
-
- ScrollSpy.prototype.getScrollHeight = function () {
- return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
- }
-
- ScrollSpy.prototype.refresh = function () {
- var that = this
- var offsetMethod = 'offset'
- var offsetBase = 0
-
- this.offsets = []
- this.targets = []
- this.scrollHeight = this.getScrollHeight()
-
- if (!$.isWindow(this.$scrollElement[0])) {
- offsetMethod = 'position'
- offsetBase = this.$scrollElement.scrollTop()
- }
-
- this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- var href = $el.data('target') || $el.attr('href')
- var $href = /^#./.test(href) && $(href)
-
- return ($href
- && $href.length
- && $href.is(':visible')
- && [[$href[offsetMethod]().top + offsetBase, href]]) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- that.offsets.push(this[0])
- that.targets.push(this[1])
- })
- }
-
- ScrollSpy.prototype.process = function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- var scrollHeight = this.getScrollHeight()
- var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
- var offsets = this.offsets
- var targets = this.targets
- var activeTarget = this.activeTarget
- var i
-
- if (this.scrollHeight != scrollHeight) {
- this.refresh()
- }
-
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
- }
-
- if (activeTarget && scrollTop < offsets[0]) {
- this.activeTarget = null
- return this.clear()
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
- && this.activate(targets[i])
- }
- }
-
- ScrollSpy.prototype.activate = function (target) {
- this.activeTarget = target
-
- this.clear()
-
- var selector = this.selector +
- '[data-target="' + target + '"],' +
- this.selector + '[href="' + target + '"]'
-
- var active = $(selector)
- .parents('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active
- .closest('li.dropdown')
- .addClass('active')
- }
-
- active.trigger('activate.bs.scrollspy')
- }
-
- ScrollSpy.prototype.clear = function () {
- $(this.selector)
- .parentsUntil(this.options.target, '.active')
- .removeClass('active')
- }
-
-
- // SCROLLSPY PLUGIN DEFINITION
- // ===========================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.scrollspy')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.scrollspy
-
- $.fn.scrollspy = Plugin
- $.fn.scrollspy.Constructor = ScrollSpy
-
-
- // SCROLLSPY NO CONFLICT
- // =====================
-
- $.fn.scrollspy.noConflict = function () {
- $.fn.scrollspy = old
- return this
- }
-
-
- // SCROLLSPY DATA-API
- // ==================
-
- $(window).on('load.bs.scrollspy.data-api', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- Plugin.call($spy, $spy.data())
- })
- })
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: tab.js v3.3.4
- * http://getbootstrap.com/javascript/#tabs
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // TAB CLASS DEFINITION
- // ====================
-
- var Tab = function (element) {
- this.element = $(element)
- }
-
- Tab.VERSION = '3.3.4'
-
- Tab.TRANSITION_DURATION = 150
-
- Tab.prototype.show = function () {
- var $this = this.element
- var $ul = $this.closest('ul:not(.dropdown-menu)')
- var selector = $this.data('target')
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
- }
-
- if ($this.parent('li').hasClass('active')) return
-
- var $previous = $ul.find('.active:last a')
- var hideEvent = $.Event('hide.bs.tab', {
- relatedTarget: $this[0]
- })
- var showEvent = $.Event('show.bs.tab', {
- relatedTarget: $previous[0]
- })
-
- $previous.trigger(hideEvent)
- $this.trigger(showEvent)
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
-
- var $target = $(selector)
-
- this.activate($this.closest('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $previous.trigger({
- type: 'hidden.bs.tab',
- relatedTarget: $this[0]
- })
- $this.trigger({
- type: 'shown.bs.tab',
- relatedTarget: $previous[0]
- })
- })
- }
-
- Tab.prototype.activate = function (element, container, callback) {
- var $active = container.find('> .active')
- var transition = callback
- && $.support.transition
- && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
-
- element
- .addClass('active')
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if (element.parent('.dropdown-menu').length) {
- element
- .closest('li.dropdown')
- .addClass('active')
- .end()
- .find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
- }
-
- callback && callback()
- }
-
- $active.length && transition ?
- $active
- .one('bsTransitionEnd', next)
- .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
- next()
-
- $active.removeClass('in')
- }
-
-
- // TAB PLUGIN DEFINITION
- // =====================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.tab')
-
- if (!data) $this.data('bs.tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.tab
-
- $.fn.tab = Plugin
- $.fn.tab.Constructor = Tab
-
-
- // TAB NO CONFLICT
- // ===============
-
- $.fn.tab.noConflict = function () {
- $.fn.tab = old
- return this
- }
-
-
- // TAB DATA-API
- // ============
-
- var clickHandler = function (e) {
- e.preventDefault()
- Plugin.call($(this), 'show')
- }
-
- $(document)
- .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
- .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
-
-}(jQuery);
-
-/* ========================================================================
- * Bootstrap: affix.js v3.3.4
- * http://getbootstrap.com/javascript/#affix
- * ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
- 'use strict';
-
- // AFFIX CLASS DEFINITION
- // ======================
-
- var Affix = function (element, options) {
- this.options = $.extend({}, Affix.DEFAULTS, options)
-
- this.$target = $(this.options.target)
- .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
- .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
-
- this.$element = $(element)
- this.affixed = null
- this.unpin = null
- this.pinnedOffset = null
-
- this.checkPosition()
- }
-
- Affix.VERSION = '3.3.4'
-
- Affix.RESET = 'affix affix-top affix-bottom'
-
- Affix.DEFAULTS = {
- offset: 0,
- target: window
- }
-
- Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- var targetHeight = this.$target.height()
-
- if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
-
- if (this.affixed == 'bottom') {
- if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
- return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
- }
-
- var initializing = this.affixed == null
- var colliderTop = initializing ? scrollTop : position.top
- var colliderHeight = initializing ? targetHeight : height
-
- if (offsetTop != null && scrollTop <= offsetTop) return 'top'
- if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
-
- return false
- }
-
- Affix.prototype.getPinnedOffset = function () {
- if (this.pinnedOffset) return this.pinnedOffset
- this.$element.removeClass(Affix.RESET).addClass('affix')
- var scrollTop = this.$target.scrollTop()
- var position = this.$element.offset()
- return (this.pinnedOffset = position.top - scrollTop)
- }
-
- Affix.prototype.checkPositionWithEventLoop = function () {
- setTimeout($.proxy(this.checkPosition, this), 1)
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var height = this.$element.height()
- var offset = this.options.offset
- var offsetTop = offset.top
- var offsetBottom = offset.bottom
- var scrollHeight = $(document.body).height()
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
-
- var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
-
- if (this.affixed != affix) {
- if (this.unpin != null) this.$element.css('top', '')
-
- var affixType = 'affix' + (affix ? '-' + affix : '')
- var e = $.Event(affixType + '.bs.affix')
-
- this.$element.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
-
- this.$element
- .removeClass(Affix.RESET)
- .addClass(affixType)
- .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
- }
-
- if (affix == 'bottom') {
- this.$element.offset({
- top: scrollHeight - height - offsetBottom
- })
- }
- }
-
-
- // AFFIX PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.affix')
- var options = typeof option == 'object' && option
-
- if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- var old = $.fn.affix
-
- $.fn.affix = Plugin
- $.fn.affix.Constructor = Affix
-
-
- // AFFIX NO CONFLICT
- // =================
-
- $.fn.affix.noConflict = function () {
- $.fn.affix = old
- return this
- }
-
-
- // AFFIX DATA-API
- // ==============
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- var data = $spy.data()
-
- data.offset = data.offset || {}
-
- if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
- if (data.offsetTop != null) data.offset.top = data.offsetTop
-
- Plugin.call($spy, data)
- })
- })
-
-}(jQuery);
diff --git a/web/nms.gathering.org/js/bootstrap.min.js b/web/nms.gathering.org/js/bootstrap.min.js
deleted file mode 100644
index c8f82e5..0000000
--- a/web/nms.gathering.org/js/bootstrap.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
-var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/web/nms.gathering.org/js/jquery.datetimepicker.full.js b/web/nms.gathering.org/js/jquery.datetimepicker.full.js
deleted file mode 100644
index 417037c..0000000
--- a/web/nms.gathering.org/js/jquery.datetimepicker.full.js
+++ /dev/null
@@ -1,3073 +0,0 @@
-/*!
- * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015
- * @version 1.3.3
- *
- * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
- * @see http://php.net/manual/en/function.date.php
- *
- * For more JQuery plugins visit http://plugins.krajee.com
- * For more Yii related demos visit http://demos.krajee.com
- */
-var DateFormatter;
-(function () {
- "use strict";
-
- var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
- DAY = 1000 * 60 * 60 * 24;
- HOUR = 3600;
-
- _compare = function (str1, str2) {
- return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();
- };
- _lpad = function (value, length, char) {
- var chr = char || '0', val = value.toString();
- return val.length < length ? _lpad(chr + val, length) : val;
- };
- _extend = function (out) {
- var i, obj;
- out = out || {};
- for (i = 1; i < arguments.length; i++) {
- obj = arguments[i];
- if (!obj) {
- continue;
- }
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if (typeof obj[key] === 'object') {
- _extend(out[key], obj[key]);
- } else {
- out[key] = obj[key];
- }
- }
- }
- }
- return out;
- };
- defaultSettings = {
- dateSettings: {
- days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
- daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
- months: [
- 'January', 'February', 'March', 'April', 'May', 'June', 'July',
- 'August', 'September', 'October', 'November', 'December'
- ],
- monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- meridiem: ['AM', 'PM'],
- ordinal: function (number) {
- var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};
- return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];
- }
- },
- separators: /[ \-+\/\.T:@]/g,
- validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
- intParts: /[djwNzmnyYhHgGis]/g,
- tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
- tzClip: /[^-+\dA-Z]/g
- };
-
- DateFormatter = function (options) {
- var self = this, config = _extend(defaultSettings, options);
- self.dateSettings = config.dateSettings;
- self.separators = config.separators;
- self.validParts = config.validParts;
- self.intParts = config.intParts;
- self.tzParts = config.tzParts;
- self.tzClip = config.tzClip;
- };
-
- DateFormatter.prototype = {
- constructor: DateFormatter,
- parseDate: function (vDate, vFormat) {
- var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,
- vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
- out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
- if (!vDate) {
- return undefined;
- }
- if (vDate instanceof Date) {
- return vDate;
- }
- if (typeof vDate === 'number') {
- return new Date(vDate);
- }
- if (vFormat === 'U') {
- i = parseInt(vDate);
- return i ? new Date(i * 1000) : vDate;
- }
- if (typeof vDate !== 'string') {
- return '';
- }
- vFormatParts = vFormat.match(self.validParts);
- if (!vFormatParts || vFormatParts.length === 0) {
- throw new Error("Invalid date format definition.");
- }
- vDateParts = vDate.replace(self.separators, '\0').split('\0');
- for (i = 0; i < vDateParts.length; i++) {
- vDatePart = vDateParts[i];
- iDatePart = parseInt(vDatePart);
- switch (vFormatParts[i]) {
- case 'y':
- case 'Y':
- len = vDatePart.length;
- if (len === 2) {
- out.year = parseInt((iDatePart < 70 ? '20' : '19') + vDatePart);
- } else if (len === 4) {
- out.year = iDatePart;
- }
- vDateFlag = true;
- break;
- case 'm':
- case 'n':
- case 'M':
- case 'F':
- if (isNaN(vDatePart)) {
- vMonth = vSettings.monthsShort.indexOf(vDatePart);
- if (vMonth > -1) {
- out.month = vMonth + 1;
- }
- vMonth = vSettings.months.indexOf(vDatePart);
- if (vMonth > -1) {
- out.month = vMonth + 1;
- }
- } else {
- if (iDatePart >= 1 && iDatePart <= 12) {
- out.month = iDatePart;
- }
- }
- vDateFlag = true;
- break;
- case 'd':
- case 'j':
- if (iDatePart >= 1 && iDatePart <= 31) {
- out.day = iDatePart;
- }
- vDateFlag = true;
- break;
- case 'g':
- case 'h':
- vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
- (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;
- mer = vDateParts[vMeriIndex];
- if (vMeriIndex > -1) {
- vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :
- (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);
- if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {
- out.hour = iDatePart + vMeriOffset - 1;
- } else if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- } else if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 'G':
- case 'H':
- if (iDatePart >= 0 && iDatePart <= 23) {
- out.hour = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 'i':
- if (iDatePart >= 0 && iDatePart <= 59) {
- out.min = iDatePart;
- }
- vTimeFlag = true;
- break;
- case 's':
- if (iDatePart >= 0 && iDatePart <= 59) {
- out.sec = iDatePart;
- }
- vTimeFlag = true;
- break;
- }
- }
- if (vDateFlag === true && out.year && out.month && out.day) {
- out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
- } else {
- if (vTimeFlag !== true) {
- return false;
- }
- out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
- }
- return out.date;
- },
- guessDate: function (vDateStr, vFormat) {
- if (typeof vDateStr !== 'string') {
- return vDateStr;
- }
- var self = this, vParts = vDateStr.replace(self.separators, '\0').split('\0'), vPattern = /^[djmn]/g,
- vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, iPart, iSec;
-
- if (!vPattern.test(vFormatParts[0])) {
- return vDateStr;
- }
-
- for (i = 0; i < vParts.length; i++) {
- vDigit = 2;
- iPart = vParts[i];
- iSec = parseInt(iPart.substr(0, 2));
- switch (i) {
- case 0:
- if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
- vDate.setMonth(iSec - 1);
- } else {
- vDate.setDate(iSec);
- }
- break;
- case 1:
- if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
- vDate.setDate(iSec);
- } else {
- vDate.setMonth(iSec - 1);
- }
- break;
- case 2:
- vYear = vDate.getFullYear();
- if (iPart.length < 4) {
- vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
- vDigit = iPart.length;
- } else {
- vDate.setFullYear = parseInt(iPart.substr(0, 4));
- vDigit = 4;
- }
- break;
- case 3:
- vDate.setHours(iSec);
- break;
- case 4:
- vDate.setMinutes(iSec);
- break;
- case 5:
- vDate.setSeconds(iSec);
- break;
- }
- if (iPart.substr(vDigit).length > 0) {
- vParts.splice(i + 1, 0, iPart.substr(vDigit));
- }
- }
- return vDate;
- },
- parseFormat: function (vChar, vDate) {
- var self = this, vSettings = self.dateSettings, fmt, backspace = /\\?(.?)/gi, doFormat = function (t, s) {
- return fmt[t] ? fmt[t]() : s;
- };
- fmt = {
- /////////
- // DAY //
- /////////
- /**
- * Day of month with leading 0: `01..31`
- * @return {string}
- */
- d: function () {
- return _lpad(fmt.j(), 2);
- },
- /**
- * Shorthand day name: `Mon...Sun`
- * @return {string}
- */
- D: function () {
- return vSettings.daysShort[fmt.w()];
- },
- /**
- * Day of month: `1..31`
- * @return {number}
- */
- j: function () {
- return vDate.getDate();
- },
- /**
- * Full day name: `Monday...Sunday`
- * @return {number}
- */
- l: function () {
- return vSettings.days[fmt.w()];
- },
- /**
- * ISO-8601 day of week: `1[Mon]..7[Sun]`
- * @return {number}
- */
- N: function () {
- return fmt.w() || 7;
- },
- /**
- * Day of week: `0[Sun]..6[Sat]`
- * @return {number}
- */
- w: function () {
- return vDate.getDay();
- },
- /**
- * Day of year: `0..365`
- * @return {number}
- */
- z: function () {
- var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);
- return Math.round((a - b) / DAY);
- },
-
- //////////
- // WEEK //
- //////////
- /**
- * ISO-8601 week number
- * @return {number}
- */
- W: function () {
- var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);
- return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
- },
-
- ///////////
- // MONTH //
- ///////////
- /**
- * Full month name: `January...December`
- * @return {string}
- */
- F: function () {
- return vSettings.months[vDate.getMonth()];
- },
- /**
- * Month w/leading 0: `01..12`
- * @return {string}
- */
- m: function () {
- return _lpad(fmt.n(), 2);
- },
- /**
- * Shorthand month name; `Jan...Dec`
- * @return {string}
- */
- M: function () {
- return vSettings.monthsShort[vDate.getMonth()];
- },
- /**
- * Month: `1...12`
- * @return {number}
- */
- n: function () {
- return vDate.getMonth() + 1;
- },
- /**
- * Days in month: `28...31`
- * @return {number}
- */
- t: function () {
- return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
- },
-
- //////////
- // YEAR //
- //////////
- /**
- * Is leap year? `0 or 1`
- * @return {number}
- */
- L: function () {
- var Y = fmt.Y();
- return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;
- },
- /**
- * ISO-8601 year
- * @return {number}
- */
- o: function () {
- var n = fmt.n(), W = fmt.W(), Y = fmt.Y();
- return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);
- },
- /**
- * Full year: `e.g. 1980...2010`
- * @return {number}
- */
- Y: function () {
- return vDate.getFullYear();
- },
- /**
- * Last two digits of year: `00...99`
- * @return {string}
- */
- y: function () {
- return fmt.Y().toString().slice(-2);
- },
-
- //////////
- // TIME //
- //////////
- /**
- * Meridian lower: `am or pm`
- * @return {string}
- */
- a: function () {
- return fmt.A().toLowerCase();
- },
- /**
- * Meridian upper: `AM or PM`
- * @return {string}
- */
- A: function () {
- var n = fmt.G() < 12 ? 0 : 1;
- return vSettings.meridiem[n];
- },
- /**
- * Swatch Internet time: `000..999`
- * @return {string}
- */
- B: function () {
- var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();
- return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
- },
- /**
- * 12-Hours: `1..12`
- * @return {number}
- */
- g: function () {
- return fmt.G() % 12 || 12;
- },
- /**
- * 24-Hours: `0..23`
- * @return {number}
- */
- G: function () {
- return vDate.getHours();
- },
- /**
- * 12-Hours with leading 0: `01..12`
- * @return {string}
- */
- h: function () {
- return _lpad(fmt.g(), 2);
- },
- /**
- * 24-Hours w/leading 0: `00..23`
- * @return {string}
- */
- H: function () {
- return _lpad(fmt.G(), 2);
- },
- /**
- * Minutes w/leading 0: `00..59`
- * @return {string}
- */
- i: function () {
- return _lpad(vDate.getMinutes(), 2);
- },
- /**
- * Seconds w/leading 0: `00..59`
- * @return {string}
- */
- s: function () {
- return _lpad(vDate.getSeconds(), 2);
- },
- /**
- * Microseconds: `000000-999000`
- * @return {string}
- */
- u: function () {
- return _lpad(vDate.getMilliseconds() * 1000, 6);
- },
-
- //////////////
- // TIMEZONE //
- //////////////
- /**
- * Timezone identifier: `e.g. Atlantic/Azores, ...`
- * @return {string}
- */
- e: function () {
- var str = /\((.*)\)/.exec(String(vDate))[1];
- return str || 'Coordinated Universal Time';
- },
- /**
- * Timezone abbreviation: `e.g. EST, MDT, ...`
- * @return {string}
- */
- T: function () {
- var str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip, "");
- return str || 'UTC';
- },
- /**
- * DST observed? `0 or 1`
- * @return {number}
- */
- I: function () {
- var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),
- b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);
- return ((a - c) !== (b - d)) ? 1 : 0;
- },
- /**
- * Difference to GMT in hour format: `e.g. +0200`
- * @return {string}
- */
- O: function () {
- var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);
- return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
- },
- /**
- * Difference to GMT with colon: `e.g. +02:00`
- * @return {string}
- */
- P: function () {
- var O = fmt.O();
- return (O.substr(0, 3) + ':' + O.substr(3, 2));
- },
- /**
- * Timezone offset in seconds: `-43200...50400`
- * @return {number}
- */
- Z: function () {
- return -vDate.getTimezoneOffset() * 60;
- },
-
- ////////////////////
- // FULL DATE TIME //
- ////////////////////
- /**
- * ISO-8601 date
- * @return {string}
- */
- c: function () {
- return 'Y-m-d\\TH:i:s'.replace(backspace, doFormat);
- },
- /**
- * RFC 2822 date
- * @return {string}
- */
- r: function () {
- return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
- },
- /**
- * Seconds since UNIX epoch
- * @return {number}
- */
- U: function () {
- return vDate.getTime() / 1000 || 0;
- }
- };
- return doFormat(vChar, vChar);
- },
- formatDate: function (vDate, vFormat) {
- var self = this, i, n, len, str, vChar, vDateStr = '';
- if (typeof vDate === 'string') {
- vDate = self.parseDate(vDate, vFormat);
- if (vDate === false) {
- return false;
- }
- }
- if (vDate instanceof Date) {
- len = vFormat.length;
- for (i = 0; i < len; i++) {
- vChar = vFormat.charAt(i);
- if (vChar === 'S') {
- continue;
- }
- str = self.parseFormat(vChar, vDate);
- if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {
- n = parseInt(str);
- str += self.dateSettings.ordinal(n);
- }
- vDateStr += str;
- }
- return vDateStr;
- }
- return '';
- }
- };
-})();/**
- * @preserve jQuery DateTimePicker plugin v2.5.1
- * @homepage http://xdsoft.net/jqplugins/datetimepicker/
- * @author Chupurnov Valeriy (<chupurnov@gmail.com>)
- */
-/*global DateFormatter, document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/
-;(function (factory) {
- if ( typeof define === 'function' && define.amd ) {
- // AMD. Register as an anonymous module.
- define(['jquery', 'jquery-mousewheel'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS style for Browserify
- module.exports = factory;
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function ($) {
- 'use strict';
- var default_options = {
- i18n: {
- ar: { // Arabic
- months: [
- "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
- ],
- dayOfWeekShort: [
- "ن", "ث", "ع", "خ", "ج", "س", "ح"
- ],
- dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
- },
- ro: { // Romanian
- months: [
- "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
- ],
- dayOfWeekShort: [
- "Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
- ],
- dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
- },
- id: { // Indonesian
- months: [
- "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
- ],
- dayOfWeekShort: [
- "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
- ],
- dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
- },
- is: { // Icelandic
- months: [
- "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
- ],
- dayOfWeekShort: [
- "Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
- ],
- dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
- },
- bg: { // Bulgarian
- months: [
- "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
- ],
- dayOfWeekShort: [
- "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
- ],
- dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
- },
- fa: { // Persian/Farsi
- months: [
- 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
- ],
- dayOfWeekShort: [
- 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
- ],
- dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
- },
- ru: { // Russian
- months: [
- 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
- ],
- dayOfWeekShort: [
- "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
- ],
- dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
- },
- uk: { // Ukrainian
- months: [
- 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
- ],
- dayOfWeekShort: [
- "Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
- ],
- dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
- },
- en: { // English
- months: [
- "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- ],
- dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
- },
- el: { // Ελληνικά
- months: [
- "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
- ],
- dayOfWeekShort: [
- "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
- ],
- dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
- },
- de: { // German
- months: [
- 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
- ],
- dayOfWeekShort: [
- "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
- ],
- dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
- },
- nl: { // Dutch
- months: [
- "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
- ],
- dayOfWeekShort: [
- "zo", "ma", "di", "wo", "do", "vr", "za"
- ],
- dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
- },
- tr: { // Turkish
- months: [
- "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
- ],
- dayOfWeekShort: [
- "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
- ],
- dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
- },
- fr: { //French
- months: [
- "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
- ],
- dayOfWeekShort: [
- "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
- ],
- dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
- },
- es: { // Spanish
- months: [
- "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
- ],
- dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
- },
- th: { // Thai
- months: [
- 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
- ],
- dayOfWeekShort: [
- 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
- ],
- dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
- },
- pl: { // Polish
- months: [
- "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
- ],
- dayOfWeekShort: [
- "nd", "pn", "wt", "śr", "cz", "pt", "sb"
- ],
- dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
- },
- pt: { // Portuguese
- months: [
- "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
- ],
- dayOfWeekShort: [
- "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
- ],
- dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
- },
- ch: { // Simplified Chinese
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ]
- },
- se: { // Swedish
- months: [
- "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
- ]
- },
- kr: { // Korean
- months: [
- "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
- ],
- dayOfWeekShort: [
- "일", "월", "화", "수", "목", "금", "토"
- ],
- dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
- },
- it: { // Italian
- months: [
- "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
- ],
- dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
- },
- da: { // Dansk
- months: [
- "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
- ],
- dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
- },
- no: { // Norwegian
- months: [
- "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
- ],
- dayOfWeekShort: [
- "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
- ],
- dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
- },
- ja: { // Japanese
- months: [
- "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
- ],
- dayOfWeekShort: [
- "日", "月", "火", "水", "木", "金", "土"
- ],
- dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
- },
- vi: { // Vietnamese
- months: [
- "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
- ],
- dayOfWeekShort: [
- "CN", "T2", "T3", "T4", "T5", "T6", "T7"
- ],
- dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
- },
- sl: { // Slovenščina
- months: [
- "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
- ],
- dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
- },
- cs: { // Čeština
- months: [
- "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
- ],
- dayOfWeekShort: [
- "Ne", "Po", "Út", "St", "Čt", "Pá", "So"
- ]
- },
- hu: { // Hungarian
- months: [
- "Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
- ],
- dayOfWeekShort: [
- "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
- ],
- dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
- },
- az: { //Azerbaijanian (Azeri)
- months: [
- "Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
- ],
- dayOfWeekShort: [
- "B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
- ],
- dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
- },
- bs: { //Bosanski
- months: [
- "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
- },
- ca: { //Català
- months: [
- "Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
- ],
- dayOfWeekShort: [
- "Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
- ],
- dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
- },
- 'en-GB': { //English (British)
- months: [
- "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
- ],
- dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
- },
- et: { //"Eesti"
- months: [
- "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
- ],
- dayOfWeekShort: [
- "P", "E", "T", "K", "N", "R", "L"
- ],
- dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
- },
- eu: { //Euskara
- months: [
- "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
- ],
- dayOfWeekShort: [
- "Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
- ],
- dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
- },
- fi: { //Finnish (Suomi)
- months: [
- "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
- ],
- dayOfWeekShort: [
- "Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
- ],
- dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
- },
- gl: { //Galego
- months: [
- "Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
- ],
- dayOfWeekShort: [
- "Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
- ],
- dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
- },
- hr: { //Hrvatski
- months: [
- "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
- },
- ko: { //Korean (한국어)
- months: [
- "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
- ],
- dayOfWeekShort: [
- "일", "월", "화", "수", "목", "금", "토"
- ],
- dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
- },
- lt: { //Lithuanian (lietuvių)
- months: [
- "Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
- ],
- dayOfWeekShort: [
- "Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
- ],
- dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
- },
- lv: { //Latvian (Latviešu)
- months: [
- "Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
- ],
- dayOfWeekShort: [
- "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
- ],
- dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
- },
- mk: { //Macedonian (Македонски)
- months: [
- "јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
- ],
- dayOfWeekShort: [
- "нед", "пон", "вто", "сре", "чет", "пет", "саб"
- ],
- dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
- },
- mn: { //Mongolian (Монгол)
- months: [
- "1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
- ],
- dayOfWeekShort: [
- "Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
- ],
- dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
- },
- 'pt-BR': { //Português(Brasil)
- months: [
- "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
- ],
- dayOfWeekShort: [
- "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
- ],
- dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
- },
- sk: { //Slovenčina
- months: [
- "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
- ],
- dayOfWeekShort: [
- "Ne", "Po", "Ut", "St", "Št", "Pi", "So"
- ],
- dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
- },
- sq: { //Albanian (Shqip)
- months: [
- "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
- ],
- dayOfWeekShort: [
- "Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
- ],
- dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
- },
- 'sr-YU': { //Serbian (Srpski)
- months: [
- "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
- ],
- dayOfWeekShort: [
- "Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
- ],
- dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
- },
- sr: { //Serbian Cyrillic (Српски)
- months: [
- "јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
- ],
- dayOfWeekShort: [
- "нед", "пон", "уто", "сре", "чет", "пет", "суб"
- ],
- dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
- },
- sv: { //Svenska
- months: [
- "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
- ],
- dayOfWeekShort: [
- "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
- ],
- dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
- },
- 'zh-TW': { //Traditional Chinese (繁體中文)
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ],
- dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
- },
- zh: { //Simplified Chinese (简体中文)
- months: [
- "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
- ],
- dayOfWeekShort: [
- "日", "一", "二", "三", "四", "五", "六"
- ],
- dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
- },
- he: { //Hebrew (עברית)
- months: [
- 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
- ],
- dayOfWeekShort: [
- 'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
- ],
- dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
- },
- hy: { // Armenian
- months: [
- "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
- ],
- dayOfWeekShort: [
- "Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
- ],
- dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
- },
- kg: { // Kyrgyz
- months: [
- 'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
- ],
- dayOfWeekShort: [
- "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
- ],
- dayOfWeek: [
- "Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
- ]
- },
- rm: { // Romansh
- months: [
- "Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"
- ],
- dayOfWeekShort: [
- "Du", "Gli", "Ma", "Me", "Gie", "Ve", "So"
- ],
- dayOfWeek: [
- "Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
- ]
- },
- },
- value: '',
- rtl: false,
-
- format: 'Y/m/d H:i',
- formatTime: 'H:i',
- formatDate: 'Y/m/d',
-
- startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
- step: 60,
- monthChangeSpinner: true,
-
- closeOnDateSelect: false,
- closeOnTimeSelect: true,
- closeOnWithoutClick: true,
- closeOnInputClick: true,
-
- timepicker: true,
- datepicker: true,
- weeks: false,
-
- defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i')
- defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')
-
- minDate: false,
- maxDate: false,
- minTime: false,
- maxTime: false,
- disabledMinTime: false,
- disabledMaxTime: false,
-
- allowTimes: [],
- opened: false,
- initTime: true,
- inline: false,
- theme: '',
-
- onSelectDate: function () {},
- onSelectTime: function () {},
- onChangeMonth: function () {},
- onGetWeekOfYear: function () {},
- onChangeYear: function () {},
- onChangeDateTime: function () {},
- onShow: function () {},
- onClose: function () {},
- onGenerate: function () {},
-
- withoutCopyright: true,
- inverseButton: false,
- hours12: false,
- next: 'xdsoft_next',
- prev : 'xdsoft_prev',
- dayOfWeekStart: 0,
- parentID: 'body',
- timeHeightInTimePicker: 25,
- timepickerScrollbar: true,
- todayButton: true,
- prevButton: true,
- nextButton: true,
- defaultSelect: true,
-
- scrollMonth: true,
- scrollTime: true,
- scrollInput: true,
-
- lazyInit: false,
- mask: false,
- validateOnBlur: true,
- allowBlank: true,
- yearStart: 1950,
- yearEnd: 2050,
- monthStart: 0,
- monthEnd: 11,
- style: '',
- id: '',
- fixed: false,
- roundTime: 'round', // ceil, floor
- className: '',
- weekends: [],
- highlightedDates: [],
- highlightedPeriods: [],
- allowDates : [],
- allowDateRe : null,
- disabledDates : [],
- disabledWeekDays: [],
- yearOffset: 0,
- beforeShowDay: null,
-
- enterLikeTab: true,
- showApplyButton: false
- };
-
- var dateHelper = null,
- globalLocaleDefault = 'en',
- globalLocale = 'en';
-
- var dateFormatterOptionsDefault = {
- meridiem: ['AM', 'PM']
- };
-
- var initDateFormatter = function(){
- var locale = default_options.i18n[globalLocale],
- opts = {
- days: locale.dayOfWeek,
- daysShort: locale.dayOfWeekShort,
- months: locale.months,
- monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
- };
-
- dateHelper = new DateFormatter({
- dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
- });
- };
-
- // for locale settings
- $.datetimepicker = {
- setLocale: function(locale){
- var newLocale = default_options.i18n[locale]?locale:globalLocaleDefault;
- if(globalLocale != newLocale){
- globalLocale = newLocale;
- // reinit date formatter
- initDateFormatter();
- }
- },
- RFC_2822: 'D, d M Y H:i:s O',
- ATOM: 'Y-m-d\TH:i:sP',
- ISO_8601: 'Y-m-d\TH:i:sO',
- RFC_822: 'D, d M y H:i:s O',
- RFC_850: 'l, d-M-y H:i:s T',
- RFC_1036: 'D, d M y H:i:s O',
- RFC_1123: 'D, d M Y H:i:s O',
- RSS: 'D, d M Y H:i:s O',
- W3C: 'Y-m-d\TH:i:sP'
- };
-
- // first init date formatter
- initDateFormatter();
-
- // fix for ie8
- if (!window.getComputedStyle) {
- window.getComputedStyle = function (el, pseudo) {
- this.el = el;
- this.getPropertyValue = function (prop) {
- var re = /(\-([a-z]){1})/g;
- if (prop === 'float') {
- prop = 'styleFloat';
- }
- if (re.test(prop)) {
- prop = prop.replace(re, function (a, b, c) {
- return c.toUpperCase();
- });
- }
- return el.currentStyle[prop] || null;
- };
- return this;
- };
- }
- if (!Array.prototype.indexOf) {
- Array.prototype.indexOf = function (obj, start) {
- var i, j;
- for (i = (start || 0), j = this.length; i < j; i += 1) {
- if (this[i] === obj) { return i; }
- }
- return -1;
- };
- }
- Date.prototype.countDaysInMonth = function () {
- return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
- };
- $.fn.xdsoftScroller = function (percent) {
- return this.each(function () {
- var timeboxparent = $(this),
- pointerEventToXY = function (e) {
- var out = {x: 0, y: 0},
- touch;
- if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
- touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
- out.x = touch.clientX;
- out.y = touch.clientY;
- } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
- out.x = e.clientX;
- out.y = e.clientY;
- }
- return out;
- },
- move = 0,
- timebox,
- parentHeight,
- height,
- scrollbar,
- scroller,
- maximumOffset = 100,
- start = false,
- startY = 0,
- startTop = 0,
- h1 = 0,
- touchStart = false,
- startTopScroll = 0,
- calcOffset = function () {};
- if (percent === 'hide') {
- timeboxparent.find('.xdsoft_scrollbar').hide();
- return;
- }
- if (!$(this).hasClass('xdsoft_scroller_box')) {
- timebox = timeboxparent.children().eq(0);
- parentHeight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- scrollbar = $('<div class="xdsoft_scrollbar"></div>');
- scroller = $('<div class="xdsoft_scroller"></div>');
- scrollbar.append(scroller);
-
- timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
- calcOffset = function calcOffset(event) {
- var offset = pointerEventToXY(event).y - startY + startTopScroll;
- if (offset < 0) {
- offset = 0;
- }
- if (offset + scroller[0].offsetHeight > h1) {
- offset = h1 - scroller[0].offsetHeight;
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);
- };
-
- scroller
- .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
- if (!parentHeight) {
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
- }
-
- startY = pointerEventToXY(event).y;
- startTopScroll = parseInt(scroller.css('margin-top'), 10);
- h1 = scrollbar[0].offsetHeight;
-
- if (event.type === 'mousedown' || event.type === 'touchstart') {
- if (document) {
- $(document.body).addClass('xdsoft_noselect');
- }
- $([document.body, window]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {
- $([document.body, window]).off('touchend mouseup.xdsoft_scroller', arguments_callee)
- .off('mousemove.xdsoft_scroller', calcOffset)
- .removeClass('xdsoft_noselect');
- });
- $(document.body).on('mousemove.xdsoft_scroller', calcOffset);
- } else {
- touchStart = true;
- event.stopPropagation();
- event.preventDefault();
- }
- })
- .on('touchmove', function (event) {
- if (touchStart) {
- event.preventDefault();
- calcOffset(event);
- }
- })
- .on('touchend touchcancel', function (event) {
- touchStart = false;
- startTopScroll = 0;
- });
-
- timeboxparent
- .on('scroll_element.xdsoft_scroller', function (event, percentage) {
- if (!parentHeight) {
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
- }
- percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;
-
- scroller.css('margin-top', maximumOffset * percentage);
-
- setTimeout(function () {
- timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
- }, 10);
- })
- .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {
- var percent, sh;
- parentHeight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- percent = parentHeight / height;
- sh = percent * scrollbar[0].offsetHeight;
- if (percent > 1) {
- scroller.hide();
- } else {
- scroller.show();
- scroller.css('height', parseInt(sh > 10 ? sh : 10, 10));
- maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;
- if (noTriggerScroll !== true) {
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
- }
- }
- });
-
- timeboxparent.on('mousewheel', function (event) {
- var top = Math.abs(parseInt(timebox.css('marginTop'), 10));
-
- top = top - (event.deltaY * 20);
- if (top < 0) {
- top = 0;
- }
-
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
- event.stopPropagation();
- return false;
- });
-
- timeboxparent.on('touchstart', function (event) {
- start = pointerEventToXY(event);
- startTop = Math.abs(parseInt(timebox.css('marginTop'), 10));
- });
-
- timeboxparent.on('touchmove', function (event) {
- if (start) {
- event.preventDefault();
- var coord = pointerEventToXY(event);
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
- }
- });
-
- timeboxparent.on('touchend touchcancel', function (event) {
- start = false;
- startTop = 0;
- });
- }
- timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
- });
- };
-
- $.fn.datetimepicker = function (opt, opt2) {
- var result = this,
- KEY0 = 48,
- KEY9 = 57,
- _KEY0 = 96,
- _KEY9 = 105,
- CTRLKEY = 17,
- DEL = 46,
- ENTER = 13,
- ESC = 27,
- BACKSPACE = 8,
- ARROWLEFT = 37,
- ARROWUP = 38,
- ARROWRIGHT = 39,
- ARROWDOWN = 40,
- TAB = 9,
- F5 = 116,
- AKEY = 65,
- CKEY = 67,
- VKEY = 86,
- ZKEY = 90,
- YKEY = 89,
- ctrlDown = false,
- options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),
-
- lazyInitTimer = 0,
- createDateTimePicker,
- destroyDateTimePicker,
-
- lazyInit = function (input) {
- input
- .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(event) {
- if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
- return;
- }
- clearTimeout(lazyInitTimer);
- lazyInitTimer = setTimeout(function () {
-
- if (!input.data('xdsoft_datetimepicker')) {
- createDateTimePicker(input);
- }
- input
- .off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)
- .trigger('open.xdsoft');
- }, 100);
- });
- };
-
- createDateTimePicker = function (input) {
- var datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
- xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
- datepicker = $('<div class="xdsoft_datepicker active"></div>'),
- mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
- '<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
- '<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
- '<button type="button" class="xdsoft_next"></button></div>'),
- calendar = $('<div class="xdsoft_calendar"></div>'),
- timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
- timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
- timebox = $('<div class="xdsoft_time_variant"></div>'),
- applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
-
- monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
- yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
- triggerAfterOpen = false,
- XDSoft_datetime,
-
- xchangeTimer,
- timerclick,
- current_time_index,
- setPos,
- timer = 0,
- timer1 = 0,
- _xdsoft_datetime;
-
- if (options.id) {
- datetimepicker.attr('id', options.id);
- }
- if (options.style) {
- datetimepicker.attr('style', options.style);
- }
- if (options.weeks) {
- datetimepicker.addClass('xdsoft_showweeks');
- }
- if (options.rtl) {
- datetimepicker.addClass('xdsoft_rtl');
- }
-
- datetimepicker.addClass('xdsoft_' + options.theme);
- datetimepicker.addClass(options.className);
-
- mounth_picker
- .find('.xdsoft_month span')
- .after(monthselect);
- mounth_picker
- .find('.xdsoft_year span')
- .after(yearselect);
-
- mounth_picker
- .find('.xdsoft_month,.xdsoft_year')
- .on('touchstart mousedown.xdsoft', function (event) {
- var select = $(this).find('.xdsoft_select').eq(0),
- val = 0,
- top = 0,
- visible = select.is(':visible'),
- items,
- i;
-
- mounth_picker
- .find('.xdsoft_select')
- .hide();
- if (_xdsoft_datetime.currentTime) {
- val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();
- }
-
- select[visible ? 'hide' : 'show']();
- for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {
- if (items.eq(i).data('value') === val) {
- break;
- } else {
- top += items[0].offsetHeight;
- }
- }
-
- select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
- event.stopPropagation();
- return false;
- });
-
- mounth_picker
- .find('.xdsoft_select')
- .xdsoftScroller()
- .on('touchstart mousedown.xdsoft', function (event) {
- event.stopPropagation();
- event.preventDefault();
- })
- .on('touchstart mousedown.xdsoft', '.xdsoft_option', function (event) {
- if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- }
-
- var year = _xdsoft_datetime.currentTime.getFullYear();
- if (_xdsoft_datetime && _xdsoft_datetime.currentTime) {
- _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));
- }
-
- $(this).parent().parent().hide();
-
- datetimepicker.trigger('xchange.xdsoft');
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
- options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- });
-
- datetimepicker.getValue = function () {
- return _xdsoft_datetime.getCurrentTime();
- };
-
- datetimepicker.setOptions = function (_options) {
- var highlightedDates = {};
-
-
- options = $.extend(true, {}, options, _options);
-
- if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
- options.allowTimes = $.extend(true, [], _options.allowTimes);
- }
-
- if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
- options.weekends = $.extend(true, [], _options.weekends);
- }
-
- if (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {
- options.allowDates = $.extend(true, [], _options.allowDates);
- }
-
- if (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)==="[object String]") {
- options.allowDateRe = new RegExp(_options.allowDateRe);
- }
-
- if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
- $.each(_options.highlightedDates, function (index, value) {
- var splitData = $.map(value.split(','), $.trim),
- exDesc,
- hDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style
- keyDate = dateHelper.formatDate(hDate.date, options.formatDate);
- if (highlightedDates[keyDate] !== undefined) {
- exDesc = highlightedDates[keyDate].desc;
- if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
- highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
- }
- } else {
- highlightedDates[keyDate] = hDate;
- }
- });
-
- options.highlightedDates = $.extend(true, [], highlightedDates);
- }
-
- if (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {
- highlightedDates = $.extend(true, [], options.highlightedDates);
- $.each(_options.highlightedPeriods, function (index, value) {
- var dateTest, // start date
- dateEnd,
- desc,
- hDate,
- keyDate,
- exDesc,
- style;
- if ($.isArray(value)) {
- dateTest = value[0];
- dateEnd = value[1];
- desc = value[2];
- style = value[3];
- }
- else {
- var splitData = $.map(value.split(','), $.trim);
- dateTest = dateHelper.parseDate(splitData[0], options.formatDate);
- dateEnd = dateHelper.parseDate(splitData[1], options.formatDate);
- desc = splitData[2];
- style = splitData[3];
- }
-
- while (dateTest <= dateEnd) {
- hDate = new HighlightedDate(dateTest, desc, style);
- keyDate = dateHelper.formatDate(dateTest, options.formatDate);
- dateTest.setDate(dateTest.getDate() + 1);
- if (highlightedDates[keyDate] !== undefined) {
- exDesc = highlightedDates[keyDate].desc;
- if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
- highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
- }
- } else {
- highlightedDates[keyDate] = hDate;
- }
- }
- });
-
- options.highlightedDates = $.extend(true, [], highlightedDates);
- }
-
- if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
- options.disabledDates = $.extend(true, [], _options.disabledDates);
- }
-
- if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
- options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
- }
-
- if ((options.open || options.opened) && (!options.inline)) {
- input.trigger('open.xdsoft');
- }
-
- if (options.inline) {
- triggerAfterOpen = true;
- datetimepicker.addClass('xdsoft_inline');
- input.after(datetimepicker).hide();
- }
-
- if (options.inverseButton) {
- options.next = 'xdsoft_prev';
- options.prev = 'xdsoft_next';
- }
-
- if (options.datepicker) {
- datepicker.addClass('active');
- } else {
- datepicker.removeClass('active');
- }
-
- if (options.timepicker) {
- timepicker.addClass('active');
- } else {
- timepicker.removeClass('active');
- }
-
- if (options.value) {
- _xdsoft_datetime.setCurrentTime(options.value);
- if (input && input.val) {
- input.val(_xdsoft_datetime.str);
- }
- }
-
- if (isNaN(options.dayOfWeekStart)) {
- options.dayOfWeekStart = 0;
- } else {
- options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;
- }
-
- if (!options.timepickerScrollbar) {
- timeboxparent.xdsoftScroller('hide');
- }
-
- if (options.minDate && /^[\+\-](.*)$/.test(options.minDate)) {
- options.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
- }
-
- if (options.maxDate && /^[\+\-](.*)$/.test(options.maxDate)) {
- options.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
- }
-
- applyButton.toggle(options.showApplyButton);
-
- mounth_picker
- .find('.xdsoft_today_button')
- .css('visibility', !options.todayButton ? 'hidden' : 'visible');
-
- mounth_picker
- .find('.' + options.prev)
- .css('visibility', !options.prevButton ? 'hidden' : 'visible');
-
- mounth_picker
- .find('.' + options.next)
- .css('visibility', !options.nextButton ? 'hidden' : 'visible');
-
- setMask(options);
-
- if (options.validateOnBlur) {
- input
- .off('blur.xdsoft')
- .on('blur.xdsoft', function () {
- if (options.allowBlank && (!$.trim($(this).val()).length || $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_'))) {
- $(this).val(null);
- datetimepicker.data('xdsoft_datetime').empty();
- } else if (!dateHelper.parseDate($(this).val(), options.format)) {
- var splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')),
- splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));
-
- // parse the numbers as 0312 => 03:12
- if (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {
- $(this).val([splittedHours, splittedMinutes].map(function (item) {
- return item > 9 ? item : '0' + item;
- }).join(':'));
- } else {
- $(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
- }
-
- datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
- } else {
- datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
- }
-
- datetimepicker.trigger('changedatetime.xdsoft');
- datetimepicker.trigger('close.xdsoft');
- });
- }
- options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;
-
- datetimepicker
- .trigger('xchange.xdsoft')
- .trigger('afterOpen.xdsoft');
- };
-
- datetimepicker
- .data('options', options)
- .on('touchstart mousedown.xdsoft', function (event) {
- event.stopPropagation();
- event.preventDefault();
- yearselect.hide();
- monthselect.hide();
- return false;
- });
-
- //scroll_element = timepicker.find('.xdsoft_time_box');
- timeboxparent.append(timebox);
- timeboxparent.xdsoftScroller();
-
- datetimepicker.on('afterOpen.xdsoft', function () {
- timeboxparent.xdsoftScroller();
- });
-
- datetimepicker
- .append(datepicker)
- .append(timepicker);
-
- if (options.withoutCopyright !== true) {
- datetimepicker
- .append(xdsoft_copyright);
- }
-
- datepicker
- .append(mounth_picker)
- .append(calendar)
- .append(applyButton);
-
- $(options.parentID)
- .append(datetimepicker);
-
- XDSoft_datetime = function () {
- var _this = this;
- _this.now = function (norecursion) {
- var d = new Date(),
- date,
- time;
-
- if (!norecursion && options.defaultDate) {
- date = _this.strToDateTime(options.defaultDate);
- d.setFullYear(date.getFullYear());
- d.setMonth(date.getMonth());
- d.setDate(date.getDate());
- }
-
- if (options.yearOffset) {
- d.setFullYear(d.getFullYear() + options.yearOffset);
- }
-
- if (!norecursion && options.defaultTime) {
- time = _this.strtotime(options.defaultTime);
- d.setHours(time.getHours());
- d.setMinutes(time.getMinutes());
- }
- return d;
- };
-
- _this.isValidDate = function (d) {
- if (Object.prototype.toString.call(d) !== "[object Date]") {
- return false;
- }
- return !isNaN(d.getTime());
- };
-
- _this.setCurrentTime = function (dTime) {
- _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();
- datetimepicker.trigger('xchange.xdsoft');
- };
-
- _this.empty = function () {
- _this.currentTime = null;
- };
-
- _this.getCurrentTime = function (dTime) {
- return _this.currentTime;
- };
-
- _this.nextMonth = function () {
-
- if (_this.currentTime === undefined || _this.currentTime === null) {
- _this.currentTime = _this.now();
- }
-
- var month = _this.currentTime.getMonth() + 1,
- year;
- if (month === 12) {
- _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
- month = 0;
- }
-
- year = _this.currentTime.getFullYear();
-
- _this.currentTime.setDate(
- Math.min(
- new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
- _this.currentTime.getDate()
- )
- );
- _this.currentTime.setMonth(month);
-
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
- options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
-
- datetimepicker.trigger('xchange.xdsoft');
- return month;
- };
-
- _this.prevMonth = function () {
-
- if (_this.currentTime === undefined || _this.currentTime === null) {
- _this.currentTime = _this.now();
- }
-
- var month = _this.currentTime.getMonth() - 1;
- if (month === -1) {
- _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
- month = 11;
- }
- _this.currentTime.setDate(
- Math.min(
- new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
- _this.currentTime.getDate()
- )
- );
- _this.currentTime.setMonth(month);
- if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
- options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- datetimepicker.trigger('xchange.xdsoft');
- return month;
- };
-
- _this.getWeekOfYear = function (datetime) {
- if (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {
- var week = options.onGetWeekOfYear.call(datetimepicker, datetime);
- if (typeof week !== 'undefined') {
- return week;
- }
- }
- var onejan = new Date(datetime.getFullYear(), 0, 1);
- //First week of the year is th one with the first Thursday according to ISO8601
- if(onejan.getDay()!=4)
- onejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));
- return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
- };
-
- _this.strToDateTime = function (sDateTime) {
- var tmpDate = [], timeOffset, currentTime;
-
- if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
- return sDateTime;
- }
-
- tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime);
- if (tmpDate) {
- tmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);
- }
- if (tmpDate && tmpDate[2]) {
- timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
- currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
- } else {
- currentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();
- }
-
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now();
- }
-
- return currentTime;
- };
-
- _this.strToDate = function (sDate) {
- if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
- return sDate;
- }
-
- var currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now(true);
- }
- return currentTime;
- };
-
- _this.strtotime = function (sTime) {
- if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
- return sTime;
- }
- var currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);
- if (!_this.isValidDate(currentTime)) {
- currentTime = _this.now(true);
- }
- return currentTime;
- };
-
- _this.str = function () {
- return dateHelper.formatDate(_this.currentTime, options.format);
- };
- _this.currentTime = this.now();
- };
-
- _xdsoft_datetime = new XDSoft_datetime();
-
- applyButton.on('touchend click', function (e) {//pathbrite
- e.preventDefault();
- datetimepicker.data('changed', true);
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
- input.val(_xdsoft_datetime.str());
- datetimepicker.trigger('close.xdsoft');
- });
- mounth_picker
- .find('.xdsoft_today_button')
- .on('touchend mousedown.xdsoft', function () {
- datetimepicker.data('changed', true);
- _xdsoft_datetime.setCurrentTime(0);
- datetimepicker.trigger('afterOpen.xdsoft');
- }).on('dblclick.xdsoft', function () {
- var currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;
- currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
- minDate = _xdsoft_datetime.strToDate(options.minDate);
- minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
- if (currentDate < minDate) {
- return;
- }
- maxDate = _xdsoft_datetime.strToDate(options.maxDate);
- maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
- if (currentDate > maxDate) {
- return;
- }
- input.val(_xdsoft_datetime.str());
- input.trigger('change');
- datetimepicker.trigger('close.xdsoft');
- });
- mounth_picker
- .find('.xdsoft_prev,.xdsoft_next')
- .on('touchend mousedown.xdsoft', function () {
- var $this = $(this),
- timer = 0,
- stop = false;
-
- (function arguments_callee1(v) {
- if ($this.hasClass(options.next)) {
- _xdsoft_datetime.nextMonth();
- } else if ($this.hasClass(options.prev)) {
- _xdsoft_datetime.prevMonth();
- }
- if (options.monthChangeSpinner) {
- if (!stop) {
- timer = setTimeout(arguments_callee1, v || 100);
- }
- }
- }(500));
-
- $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee2() {
- clearTimeout(timer);
- stop = true;
- $([document.body, window]).off('touchend mouseup.xdsoft', arguments_callee2);
- });
- });
-
- timepicker
- .find('.xdsoft_prev,.xdsoft_next')
- .on('touchend mousedown.xdsoft', function () {
- var $this = $(this),
- timer = 0,
- stop = false,
- period = 110;
- (function arguments_callee4(v) {
- var pheight = timeboxparent[0].clientHeight,
- height = timebox[0].offsetHeight,
- top = Math.abs(parseInt(timebox.css('marginTop'), 10));
- if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {
- timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
- } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
- timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);
- period = (period > 10) ? 10 : period - 10;
- if (!stop) {
- timer = setTimeout(arguments_callee4, v || period);
- }
- }(500));
- $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee5() {
- clearTimeout(timer);
- stop = true;
- $([document.body, window])
- .off('touchend mouseup.xdsoft', arguments_callee5);
- });
- });
-
- xchangeTimer = 0;
- // base handler - generating a calendar and timepicker
- datetimepicker
- .on('xchange.xdsoft', function (event) {
- clearTimeout(xchangeTimer);
- xchangeTimer = setTimeout(function () {
-
- if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- }
-
- var table = '',
- start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
- i = 0,
- j,
- today = _xdsoft_datetime.now(),
- maxDate = false,
- minDate = false,
- hDate,
- day,
- d,
- y,
- m,
- w,
- classes = [],
- customDateSettings,
- newRow = true,
- time = '',
- h = '',
- line_time,
- description;
-
- while (start.getDay() !== options.dayOfWeekStart) {
- start.setDate(start.getDate() - 1);
- }
-
- table += '<table><thead><tr>';
-
- if (options.weeks) {
- table += '<th></th>';
- }
-
- for (j = 0; j < 7; j += 1) {
- table += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
- }
-
- table += '</tr></thead>';
- table += '<tbody>';
-
- if (options.maxDate !== false) {
- maxDate = _xdsoft_datetime.strToDate(options.maxDate);
- maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
- }
-
- if (options.minDate !== false) {
- minDate = _xdsoft_datetime.strToDate(options.minDate);
- minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
- }
-
- while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
- classes = [];
- i += 1;
-
- day = start.getDay();
- d = start.getDate();
- y = start.getFullYear();
- m = start.getMonth();
- w = _xdsoft_datetime.getWeekOfYear(start);
- description = '';
-
- classes.push('xdsoft_date');
-
- if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
- customDateSettings = options.beforeShowDay.call(datetimepicker, start);
- } else {
- customDateSettings = null;
- }
-
- if(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === "[object RegExp]"){
- if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
- classes.push('xdsoft_disabled');
- }
- } else if(options.allowDates && options.allowDates.length>0){
- if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){
- classes.push('xdsoft_disabled');
- }
- } else if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
- classes.push('xdsoft_disabled');
- } else if (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
- classes.push('xdsoft_disabled');
- } else if (options.disabledWeekDays.indexOf(day) !== -1) {
- classes.push('xdsoft_disabled');
- }
-
- if (customDateSettings && customDateSettings[1] !== "") {
- classes.push(customDateSettings[1]);
- }
-
- if (_xdsoft_datetime.currentTime.getMonth() !== m) {
- classes.push('xdsoft_other_month');
- }
-
- if ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
- classes.push('xdsoft_current');
- }
-
- if (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
- classes.push('xdsoft_today');
- }
-
- if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
- classes.push('xdsoft_weekend');
- }
-
- if (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {
- hDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];
- classes.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);
- description = hDate.desc === undefined ? '' : hDate.desc;
- }
-
- if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
- classes.push(options.beforeShowDay(start));
- }
-
- if (newRow) {
- table += '<tr>';
- newRow = false;
- if (options.weeks) {
- table += '<th>' + w + '</th>';
- }
- }
-
- table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
- '<div>' + d + '</div>' +
- '</td>';
-
- if (start.getDay() === options.dayOfWeekStartPrev) {
- table += '</tr>';
- newRow = true;
- }
-
- start.setDate(d + 1);
- }
- table += '</tbody></table>';
-
- calendar.html(table);
-
- mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
- mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
-
- // generate timebox
- time = '';
- h = '';
- m = '';
-
- line_time = function line_time(h, m) {
- var now = _xdsoft_datetime.now(), optionDateTime, current_time,
- isALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;
- now.setHours(h);
- h = parseInt(now.getHours(), 10);
- now.setMinutes(m);
- m = parseInt(now.getMinutes(), 10);
- optionDateTime = new Date(_xdsoft_datetime.currentTime);
- optionDateTime.setHours(h);
- optionDateTime.setMinutes(m);
- classes = [];
- if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
- classes.push('xdsoft_disabled');
- }
- if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
- classes.push('xdsoft_disabled');
- }
-
- current_time = new Date(_xdsoft_datetime.currentTime);
- current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
-
- if (!isALlowTimesInit) {
- current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
- }
-
- if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {
- if (options.defaultSelect || datetimepicker.data('changed')) {
- classes.push('xdsoft_current');
- } else if (options.initTime) {
- classes.push('xdsoft_init_time');
- }
- }
- if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {
- classes.push('xdsoft_today');
- }
- time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + dateHelper.formatDate(now, options.formatTime) + '</div>';
- };
-
- if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
- for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {
- for (j = 0; j < 60; j += options.step) {
- h = (i < 10 ? '0' : '') + i;
- m = (j < 10 ? '0' : '') + j;
- line_time(h, m);
- }
- }
- } else {
- for (i = 0; i < options.allowTimes.length; i += 1) {
- h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
- m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
- line_time(h, m);
- }
- }
-
- timebox.html(time);
-
- opt = '';
- i = 0;
-
- for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {
- opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>';
- }
- yearselect.children().eq(0)
- .html(opt);
-
- for (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {
- opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
- }
- monthselect.children().eq(0).html(opt);
- $(datetimepicker)
- .trigger('generate.xdsoft');
- }, 10);
- event.stopPropagation();
- })
- .on('afterOpen.xdsoft', function () {
- if (options.timepicker) {
- var classType, pheight, height, top;
- if (timebox.find('.xdsoft_current').length) {
- classType = '.xdsoft_current';
- } else if (timebox.find('.xdsoft_init_time').length) {
- classType = '.xdsoft_init_time';
- }
- if (classType) {
- pheight = timeboxparent[0].clientHeight;
- height = timebox[0].offsetHeight;
- top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
- if ((height - pheight) < top) {
- top = height - pheight;
- }
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
- } else {
- timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
- }
- }
- });
-
- timerclick = 0;
- calendar
- .on('touchend click.xdsoft', 'td', function (xdevent) {
- xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
- timerclick += 1;
- var $this = $(this),
- currentTime = _xdsoft_datetime.currentTime;
-
- if (currentTime === undefined || currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- currentTime = _xdsoft_datetime.currentTime;
- }
-
- if ($this.hasClass('xdsoft_disabled')) {
- return false;
- }
-
- currentTime.setDate(1);
- currentTime.setFullYear($this.data('year'));
- currentTime.setMonth($this.data('month'));
- currentTime.setDate($this.data('date'));
-
- datetimepicker.trigger('select.xdsoft', [currentTime]);
-
- input.val(_xdsoft_datetime.str());
-
- if (options.onSelectDate && $.isFunction(options.onSelectDate)) {
- options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
- }
-
- datetimepicker.data('changed', true);
- datetimepicker.trigger('xchange.xdsoft');
- datetimepicker.trigger('changedatetime.xdsoft');
- if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {
- datetimepicker.trigger('close.xdsoft');
- }
- setTimeout(function () {
- timerclick = 0;
- }, 200);
- });
-
- timebox
- .on('touchend click.xdsoft', 'div', function (xdevent) {
- xdevent.stopPropagation();
- var $this = $(this),
- currentTime = _xdsoft_datetime.currentTime;
-
- if (currentTime === undefined || currentTime === null) {
- _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
- currentTime = _xdsoft_datetime.currentTime;
- }
-
- if ($this.hasClass('xdsoft_disabled')) {
- return false;
- }
- currentTime.setHours($this.data('hour'));
- currentTime.setMinutes($this.data('minute'));
- datetimepicker.trigger('select.xdsoft', [currentTime]);
-
- datetimepicker.data('input').val(_xdsoft_datetime.str());
-
- if (options.onSelectTime && $.isFunction(options.onSelectTime)) {
- options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
- }
- datetimepicker.data('changed', true);
- datetimepicker.trigger('xchange.xdsoft');
- datetimepicker.trigger('changedatetime.xdsoft');
- if (options.inline !== true && options.closeOnTimeSelect === true) {
- datetimepicker.trigger('close.xdsoft');
- }
- });
-
-
- datepicker
- .on('mousewheel.xdsoft', function (event) {
- if (!options.scrollMonth) {
- return true;
- }
- if (event.deltaY < 0) {
- _xdsoft_datetime.nextMonth();
- } else {
- _xdsoft_datetime.prevMonth();
- }
- return false;
- });
-
- input
- .on('mousewheel.xdsoft', function (event) {
- if (!options.scrollInput) {
- return true;
- }
- if (!options.datepicker && options.timepicker) {
- current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;
- if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {
- current_time_index += event.deltaY;
- }
- if (timebox.children().eq(current_time_index).length) {
- timebox.children().eq(current_time_index).trigger('mousedown');
- }
- return false;
- }
- if (options.datepicker && !options.timepicker) {
- datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
- if (input.val) {
- input.val(_xdsoft_datetime.str());
- }
- datetimepicker.trigger('changedatetime.xdsoft');
- return false;
- }
- });
-
- datetimepicker
- .on('changedatetime.xdsoft', function (event) {
- if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
- var $input = datetimepicker.data('input');
- options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
- delete options.value;
- $input.trigger('change');
- }
- })
- .on('generate.xdsoft', function () {
- if (options.onGenerate && $.isFunction(options.onGenerate)) {
- options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
- }
- if (triggerAfterOpen) {
- datetimepicker.trigger('afterOpen.xdsoft');
- triggerAfterOpen = false;
- }
- })
- .on('click.xdsoft', function (xdevent) {
- xdevent.stopPropagation();
- });
-
- current_time_index = 0;
-
- setPos = function () {
- /**
- * 修复输入框在window最右边,且输入框的宽度小于日期控件宽度情况下,日期控件显示不全的bug。
- * Bug fixed - The datetimepicker will overflow-y when the width of the date input less than its, which
- * could causes part of the datetimepicker being hidden.
- * by Soon start
- */
- var offset = datetimepicker.data('input').offset(),
- datetimepickerelement = datetimepicker.data('input')[0],
- top = offset.top + datetimepickerelement.offsetHeight - 1,
- left = offset.left,
- position = "absolute",
- node;
-
- if ((document.documentElement.clientWidth - offset.left) < datepicker.parent().outerWidth(true)) {
- var diff = datepicker.parent().outerWidth(true) - datetimepickerelement.offsetWidth;
- left = left - diff;
- }
- /**
- * by Soon end
- */
- if (datetimepicker.data('input').parent().css('direction') == 'rtl')
- left -= (datetimepicker.outerWidth() - datetimepicker.data('input').outerWidth());
- if (options.fixed) {
- top -= $(window).scrollTop();
- left -= $(window).scrollLeft();
- position = "fixed";
- } else {
- if (top + datetimepickerelement.offsetHeight > $(window).height() + $(window).scrollTop()) {
- top = offset.top - datetimepickerelement.offsetHeight + 1;
- }
- if (top < 0) {
- top = 0;
- }
- if (left + datetimepickerelement.offsetWidth > $(window).width()) {
- left = $(window).width() - datetimepickerelement.offsetWidth;
- }
- }
-
- node = datetimepicker[0];
- do {
- node = node.parentNode;
- if (window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) {
- left = left - (($(window).width() - node.offsetWidth) / 2);
- break;
- }
- } while (node.nodeName !== 'HTML');
- datetimepicker.css({
- left: left,
- top: top,
- position: position
- });
- };
- datetimepicker
- .on('open.xdsoft', function (event) {
- var onShow = true;
- if (options.onShow && $.isFunction(options.onShow)) {
- onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
- }
- if (onShow !== false) {
- datetimepicker.show();
- setPos();
- $(window)
- .off('resize.xdsoft', setPos)
- .on('resize.xdsoft', setPos);
-
- if (options.closeOnWithoutClick) {
- $([document.body, window]).on('touchstart mousedown.xdsoft', function arguments_callee6() {
- datetimepicker.trigger('close.xdsoft');
- $([document.body, window]).off('touchstart mousedown.xdsoft', arguments_callee6);
- });
- }
- }
- })
- .on('close.xdsoft', function (event) {
- var onClose = true;
- mounth_picker
- .find('.xdsoft_month,.xdsoft_year')
- .find('.xdsoft_select')
- .hide();
- if (options.onClose && $.isFunction(options.onClose)) {
- onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
- }
- if (onClose !== false && !options.opened && !options.inline) {
- datetimepicker.hide();
- }
- event.stopPropagation();
- })
- .on('toggle.xdsoft', function (event) {
- if (datetimepicker.is(':visible')) {
- datetimepicker.trigger('close.xdsoft');
- } else {
- datetimepicker.trigger('open.xdsoft');
- }
- })
- .data('input', input);
-
- timer = 0;
- timer1 = 0;
-
- datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
- datetimepicker.setOptions(options);
-
- function getCurrentValue() {
- var ct = false, time;
-
- if (options.startDate) {
- ct = _xdsoft_datetime.strToDate(options.startDate);
- } else {
- ct = options.value || ((input && input.val && input.val()) ? input.val() : '');
- if (ct) {
- ct = _xdsoft_datetime.strToDateTime(ct);
- } else if (options.defaultDate) {
- ct = _xdsoft_datetime.strToDateTime(options.defaultDate);
- if (options.defaultTime) {
- time = _xdsoft_datetime.strtotime(options.defaultTime);
- ct.setHours(time.getHours());
- ct.setMinutes(time.getMinutes());
- }
- }
- }
-
- if (ct && _xdsoft_datetime.isValidDate(ct)) {
- datetimepicker.data('changed', true);
- } else {
- ct = '';
- }
-
- return ct || 0;
- }
-
- function setMask(options) {
-
- var isValidValue = function (mask, value) {
- var reg = mask
- .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
- .replace(/_/g, '{digit+}')
- .replace(/([0-9]{1})/g, '{digit$1}')
- .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
- .replace(/\{digit[\+]\}/g, '[0-9_]{1}');
- return (new RegExp(reg)).test(value);
- },
- getCaretPos = function (input) {
- try {
- if (document.selection && document.selection.createRange) {
- var range = document.selection.createRange();
- return range.getBookmark().charCodeAt(2) - 2;
- }
- if (input.setSelectionRange) {
- return input.selectionStart;
- }
- } catch (e) {
- return 0;
- }
- },
- setCaretPos = function (node, pos) {
- node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
- if (!node) {
- return false;
- }
- if (node.createTextRange) {
- var textRange = node.createTextRange();
- textRange.collapse(true);
- textRange.moveEnd('character', pos);
- textRange.moveStart('character', pos);
- textRange.select();
- return true;
- }
- if (node.setSelectionRange) {
- node.setSelectionRange(pos, pos);
- return true;
- }
- return false;
- };
- if(options.mask) {
- input.off('keydown.xdsoft');
- }
- if (options.mask === true) {
- if (typeof moment != 'undefined') {
- options.mask = options.format
- .replace(/Y{4}/g, '9999')
- .replace(/Y{2}/g, '99')
- .replace(/M{2}/g, '19')
- .replace(/D{2}/g, '39')
- .replace(/H{2}/g, '29')
- .replace(/m{2}/g, '59')
- .replace(/s{2}/g, '59');
- } else {
- options.mask = options.format
- .replace(/Y/g, '9999')
- .replace(/F/g, '9999')
- .replace(/m/g, '19')
- .replace(/d/g, '39')
- .replace(/H/g, '29')
- .replace(/i/g, '59')
- .replace(/s/g, '59');
- }
- }
-
- if ($.type(options.mask) === 'string') {
- if (!isValidValue(options.mask, input.val())) {
- input.val(options.mask.replace(/[0-9]/g, '_'));
- setCaretPos(input[0], 0);
- }
-
- input.on('keydown.xdsoft', function (event) {
- var val = this.value,
- key = event.which,
- pos,
- digit;
-
- if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
- pos = getCaretPos(this);
- digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
-
- if ((key === BACKSPACE || key === DEL) && pos) {
- pos -= 1;
- digit = '_';
- }
-
- while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
- pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
- }
-
- val = val.substr(0, pos) + digit + val.substr(pos + 1);
- if ($.trim(val) === '') {
- val = options.mask.replace(/[0-9]/g, '_');
- } else {
- if (pos === options.mask.length) {
- event.preventDefault();
- return false;
- }
- }
-
- pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
- while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
- pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
- }
-
- if (isValidValue(options.mask, val)) {
- this.value = val;
- setCaretPos(this, pos);
- } else if ($.trim(val) === '') {
- this.value = options.mask.replace(/[0-9]/g, '_');
- } else {
- input.trigger('error_input.xdsoft');
- }
- } else {
- if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
- return true;
- }
- }
-
- event.preventDefault();
- return false;
- });
- }
- }
-
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
-
- input
- .data('xdsoft_datetimepicker', datetimepicker)
- .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (event) {
- if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
- return;
- }
- clearTimeout(timer);
- timer = setTimeout(function () {
- if (input.is(':disabled')) {
- return;
- }
-
- triggerAfterOpen = true;
- _xdsoft_datetime.setCurrentTime(getCurrentValue());
- if(options.mask) {
- setMask(options);
- }
- datetimepicker.trigger('open.xdsoft');
- }, 100);
- })
- .on('keydown.xdsoft', function (event) {
- var val = this.value, elementSelector,
- key = event.which;
- if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
- elementSelector = $("input:visible,textarea:visible,button:visible,a:visible");
- datetimepicker.trigger('close.xdsoft');
- elementSelector.eq(elementSelector.index(this) + 1).focus();
- return false;
- }
- if ([TAB].indexOf(key) !== -1) {
- datetimepicker.trigger('close.xdsoft');
- return true;
- }
- })
- .on('blur.xdsoft', function () {
- datetimepicker.trigger('close.xdsoft');
- });
- };
- destroyDateTimePicker = function (input) {
- var datetimepicker = input.data('xdsoft_datetimepicker');
- if (datetimepicker) {
- datetimepicker.data('xdsoft_datetime', null);
- datetimepicker.remove();
- input
- .data('xdsoft_datetimepicker', null)
- .off('.xdsoft');
- $(window).off('resize.xdsoft');
- $([window, document.body]).off('mousedown.xdsoft touchstart');
- if (input.unmousewheel) {
- input.unmousewheel();
- }
- }
- };
- $(document)
- .off('keydown.xdsoftctrl keyup.xdsoftctrl')
- .on('keydown.xdsoftctrl', function (e) {
- if (e.keyCode === CTRLKEY) {
- ctrlDown = true;
- }
- })
- .on('keyup.xdsoftctrl', function (e) {
- if (e.keyCode === CTRLKEY) {
- ctrlDown = false;
- }
- });
-
- this.each(function () {
- var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
- if (datetimepicker) {
- if ($.type(opt) === 'string') {
- switch (opt) {
- case 'show':
- $(this).select().focus();
- datetimepicker.trigger('open.xdsoft');
- break;
- case 'hide':
- datetimepicker.trigger('close.xdsoft');
- break;
- case 'toggle':
- datetimepicker.trigger('toggle.xdsoft');
- break;
- case 'destroy':
- destroyDateTimePicker($(this));
- break;
- case 'reset':
- this.value = this.defaultValue;
- if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {
- datetimepicker.data('changed', false);
- }
- datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
- break;
- case 'validate':
- $input = datetimepicker.data('input');
- $input.trigger('blur.xdsoft');
- break;
- default:
- if (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {
- result = datetimepicker[opt](opt2);
- }
- }
- } else {
- datetimepicker
- .setOptions(opt);
- }
- return 0;
- }
- if ($.type(opt) !== 'string') {
- if (!options.lazyInit || options.open || options.inline) {
- createDateTimePicker($(this));
- } else {
- lazyInit($(this));
- }
- }
- });
-
- return result;
- };
- $.fn.datetimepicker.defaults = default_options;
-
- function HighlightedDate(date, desc, style) {
- "use strict";
- this.date = date;
- this.desc = desc;
- this.style = style;
- }
-
-}));
-/*!
- * jQuery Mousewheel 3.1.13
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- */
-
-(function (factory) {
- if ( typeof define === 'function' && define.amd ) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS style for Browserify
- module.exports = factory;
- } else {
- // Browser globals
- factory(jQuery);
- }
-}(function ($) {
-
- var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
- toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
- ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
- slice = Array.prototype.slice,
- nullLowestDeltaTimeout, lowestDelta;
-
- if ( $.event.fixHooks ) {
- for ( var i = toFix.length; i; ) {
- $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
- }
- }
-
- var special = $.event.special.mousewheel = {
- version: '3.1.12',
-
- setup: function() {
- if ( this.addEventListener ) {
- for ( var i = toBind.length; i; ) {
- this.addEventListener( toBind[--i], handler, false );
- }
- } else {
- this.onmousewheel = handler;
- }
- // Store the line height and page height for this particular element
- $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
- $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
- },
-
- teardown: function() {
- if ( this.removeEventListener ) {
- for ( var i = toBind.length; i; ) {
- this.removeEventListener( toBind[--i], handler, false );
- }
- } else {
- this.onmousewheel = null;
- }
- // Clean up the data we added to the element
- $.removeData(this, 'mousewheel-line-height');
- $.removeData(this, 'mousewheel-page-height');
- },
-
- getLineHeight: function(elem) {
- var $elem = $(elem),
- $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
- if (!$parent.length) {
- $parent = $('body');
- }
- return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
- },
-
- getPageHeight: function(elem) {
- return $(elem).height();
- },
-
- settings: {
- adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
- normalizeOffset: true // calls getBoundingClientRect for each event
- }
- };
-
- $.fn.extend({
- mousewheel: function(fn) {
- return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
- },
-
- unmousewheel: function(fn) {
- return this.unbind('mousewheel', fn);
- }
- });
-
-
- function handler(event) {
- var orgEvent = event || window.event,
- args = slice.call(arguments, 1),
- delta = 0,
- deltaX = 0,
- deltaY = 0,
- absDelta = 0,
- offsetX = 0,
- offsetY = 0;
- event = $.event.fix(orgEvent);
- event.type = 'mousewheel';
-
- // Old school scrollwheel delta
- if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
- if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
- if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
- if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
-
- // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
- if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
- deltaX = deltaY * -1;
- deltaY = 0;
- }
-
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
- delta = deltaY === 0 ? deltaX : deltaY;
-
- // New school wheel delta (wheel event)
- if ( 'deltaY' in orgEvent ) {
- deltaY = orgEvent.deltaY * -1;
- delta = deltaY;
- }
- if ( 'deltaX' in orgEvent ) {
- deltaX = orgEvent.deltaX;
- if ( deltaY === 0 ) { delta = deltaX * -1; }
- }
-
- // No change actually happened, no reason to go any further
- if ( deltaY === 0 && deltaX === 0 ) { return; }
-
- // Need to convert lines and pages to pixels if we aren't already in pixels
- // There are three delta modes:
- // * deltaMode 0 is by pixels, nothing to do
- // * deltaMode 1 is by lines
- // * deltaMode 2 is by pages
- if ( orgEvent.deltaMode === 1 ) {
- var lineHeight = $.data(this, 'mousewheel-line-height');
- delta *= lineHeight;
- deltaY *= lineHeight;
- deltaX *= lineHeight;
- } else if ( orgEvent.deltaMode === 2 ) {
- var pageHeight = $.data(this, 'mousewheel-page-height');
- delta *= pageHeight;
- deltaY *= pageHeight;
- deltaX *= pageHeight;
- }
-
- // Store lowest absolute delta to normalize the delta values
- absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
-
- if ( !lowestDelta || absDelta < lowestDelta ) {
- lowestDelta = absDelta;
-
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- lowestDelta /= 40;
- }
- }
-
- // Adjust older deltas if necessary
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
- // Divide all the things by 40!
- delta /= 40;
- deltaX /= 40;
- deltaY /= 40;
- }
-
- // Get a whole, normalized value for the deltas
- delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
- deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
- deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
-
- // Normalise offsetX and offsetY properties
- if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
- var boundingRect = this.getBoundingClientRect();
- offsetX = event.clientX - boundingRect.left;
- offsetY = event.clientY - boundingRect.top;
- }
-
- // Add information to the event object
- event.deltaX = deltaX;
- event.deltaY = deltaY;
- event.deltaFactor = lowestDelta;
- event.offsetX = offsetX;
- event.offsetY = offsetY;
- // Go ahead and set deltaMode to 0 since we converted to pixels
- // Although this is a little odd since we overwrite the deltaX/Y
- // properties with normalized deltas.
- event.deltaMode = 0;
-
- // Add event and delta to the front of the arguments
- args.unshift(event, delta, deltaX, deltaY);
-
- // Clearout lowestDelta after sometime to better
- // handle multiple device types that give different
- // a different lowestDelta
- // Ex: trackpad = 3 and mouse wheel = 120
- if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
- nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
-
- return ($.event.dispatch || $.event.handle).apply(this, args);
- }
-
- function nullLowestDelta() {
- lowestDelta = null;
- }
-
- function shouldAdjustOldDeltas(orgEvent, absDelta) {
- // If this is an older event and the delta is divisable by 120,
- // then we are assuming that the browser is treating this as an
- // older mouse wheel event and that we should divide the deltas
- // by 40 to try and get a more usable deltaFactor.
- // Side note, this actually impacts the reported scroll distance
- // in older browsers and can cause scrolling to be slower than native.
- // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
- return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
- }
-
-}));
-
-$(document).ready(function(){
- $.datetimepicker.setLocale('en');
-});
diff --git a/web/nms.gathering.org/js/jquery.min.js b/web/nms.gathering.org/js/jquery.min.js
deleted file mode 100644
index e6a051d..0000000
--- a/web/nms.gathering.org/js/jquery.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
-}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/web/nms.gathering.org/js/nms-color-util.js b/web/nms.gathering.org/js/nms-color-util.js
deleted file mode 100644
index 6b5a4b5..0000000
--- a/web/nms.gathering.org/js/nms-color-util.js
+++ /dev/null
@@ -1,93 +0,0 @@
-
-/*
- * Some stolen colors that look OK.
- *
- * PS: Stolen from boostrap, because we use bootstrap and these look good
- * and match.
- */
-var lightblue = "#d9edf7";
-var lightgreen = "#dff0d8";
-var lightred = "#f2dede";
-var lightorange = "#fcf8e3";
-var blue = "#337ab7";
-var green = "#5cb85c";
-var teal = "#5bc0de"; // Or whatever the hell that is
-var orange = "#f0ad4e";
-var red = "#d9534f";
-var white = "#ffffff";
-
-function gradient_from_latency(latency_ms, latency_secondary_ms)
-{
- if (latency_ms == undefined)
- return blue;
- return getColorStop(parseInt(latency_ms) * 10);
-}
-
-/*
- * Return a random-ish color (for testing)
- */
-function getRandomColor()
-{
- var colors = [ "white", red, teal, orange, green, blue ];
- var i = Math.round(Math.random() * (colors.length-1));
- return colors[i];
-}
-
-/*
- * Set up the hidden gradient canvas, using an array as input.
- *
- * This gives us a flexible way to get gradients between any number of
- * colors (green to red, or blue to green to orange to red to white to pink
- * to black and so on).
- *
- * Typically called when setting up a map handler. Currently "single
- * tenant", since there's just one canvas.
- *
- * XXX: We have to store the gradients in nms.* and restore this when we
- * resize for the moment, because this canvas is also re-sized (which isn't
- * really necessary, but avoids special handling).
- */
-function drawGradient(gradients)
-{
- var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
- var gradient = ctx.createLinearGradient(0,0,1000,0);
- var stops = gradients.length - 1;
- nms.gradients = gradients;
- for (var color in gradients) {
- var i = color / stops;
- gradient.addColorStop(i, gradients[color]);
- }
- ctx.beginPath();
- ctx.strokeStyle = gradient;
- ctx.moveTo(0,0);
- ctx.lineTo(1000,0);
- ctx.lineWidth = 10;
- ctx.closePath();
- ctx.stroke();
- ctx.moveTo(0,0);
-}
-
-/*
- * Get the color of a gradient, range is from 0 to 999 (inclusive).
- */
-function getColorStop(x) {
- x = parseInt(x);
- if (x > 999)
- x = 999;
- if (x < 0)
- x = 0;
- return getColor(x,0);
-}
-
-/*
- * Get the color on the hidden canvas at a specific point. Could easily be
- * made generic.
- */
-function getColor(x,y) {
- var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
- var imageData = ctx.getImageData(x, y, 1, 1);
- var data = imageData.data;
- if (data.length < 4)
- return false;
- return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')';
-}
diff --git a/web/nms.gathering.org/js/nms-data.js b/web/nms.gathering.org/js/nms-data.js
deleted file mode 100644
index 14e5fed..0000000
--- a/web/nms.gathering.org/js/nms-data.js
+++ /dev/null
@@ -1,259 +0,0 @@
-"use strict";
-
-/*
- * This file/module/whatever is an attempt to gather all data collection in
- * one place.
- *
- * The basic idea is to have all periodic data updates unified here, with
- * stats, tracking of "ajax overflows" and general-purpose error handling
- * and callbacks and whatnot, instead of all the custom stuff that we
- * started out with.
- *
- * Sources are identified by a name, which is then available in
- * nmsData[name] in full. A copy of the previous data set is kept in
- * nmsData.old[name]. You can use getNow / setNow() to append a 'now='
- * string.
- *
- * nmsData[name] - actual data
- * nmsData.old[name] - previous copy of data
- * nmsData.registerSource() - add a source, will be polled periodicall
- * nmsData.addHandler()
- * nmsData.updateSource() - issue a one-off update, outside of whatever
- * periodic polling might take place
- * nmsData.invalidate() - Invalidate browser-cache.
- */
-
-
-var nmsData = nmsData || {
- old: {}, // Single copy of previous data. Automatically populated.
- stats: {
- identicalFetches:0,
- outstandingAjaxRequests:0,
- ajaxOverflow:0,
- pollClearsEmpty:0,
- pollClears:0,
- pollSets:0,
- newSource:0,
- oldSource:0
- },
- /*
- * The last time stamp of any data received, regardless of source.
- *
- * Used as a fallback for blank now, but can also be used to check
- * "freshness", I suppose.
- */
- _last: undefined,
- _now: undefined,
-
- /*
- * These are provided so we can introduce error checking when we
- * have time.
- *
- * now() represents the data, not the intent. That means that if
- * you want to check if we are traveling in time you should not
- * check nmsData.now. That will always return a value as long as
- * we've had a single piece of data.
- */
- get now() { return this._now || this._last; },
- set now(val) {
- if (val == undefined || !val) {
- nmsData._now = undefined;
- } else {
- // FIXME: Check if now is valid syntax.
- nmsData._now = val;
- }
- },
- /*
- * List of sources, name, handler, etc
- */
- _sources: {},
-
- /*
- * Maximum number of AJAX requests in transit before we start
- * skipping updates.
- *
- * A problem right now is that it will typically always hit the
- * same thing since everything starts at the same time...
- */
- _ajaxThreshold: 10
-};
-
-
-nmsData._dropData = function (name) {
- delete this[name];
- delete this.old[name];
-};
-
-nmsData.removeSource = function (name) {
- if (this._sources[name] == undefined) {
- this.stats.pollClearsEmpty++;
- return true;
- }
- if (this._sources[name]['handle']) {
- this.stats.pollClears++;
- clearInterval(this._sources[name]['handle']);
- }
- delete this._sources[name];
-};
-
-/*
- * Register a source.
- *
- * name: "Local" name. Maps to nmsData[name]
- * target: URL of the source
- *
- * This can be called multiple times to add multiple handlers. There's no
- * guarantee that they will be run in order, but right now they do.
- *
- * Update frequency _might_ be adaptive eventually, but since we only
- * execute callbacks on change and backend sends cache headers, the browser
- * will not issue actual HTTP requests.
- *
- * FIXME: Should be unified with nmsTimers() somehow.
- */
-nmsData.registerSource = function(name, target) {
- if (this._sources[name] == undefined) {
- this._sources[name] = { target: target, cbs: {}, fresh: true };
- this._sources[name]['handle'] = setInterval(function(){nmsData.updateSource(name)}, 1000);
- this.stats.newSource++;
- } else {
- this.stats.oldSource++;
- }
-
- this.stats.pollSets++;
-};
-
-/*
- * Add a handler (callback) for a source, using an id.
- *
- * This is idempotent: if the id is the same, it will just overwrite the
- * old id, not add a copy.
- */
-nmsData.addHandler = function(name, id, cb, cbdata) {
- var cbob = {
- id: id,
- name: name,
- cb: cb,
- fresh: true,
- cbdata: cbdata
- };
- if (id == undefined) {
- return;
- }
- this._sources[name].cbs[id] = cbob;
- this.updateSource(name);
-};
-
-/*
- * Unregister all handlers with the "id" for all sources.
- *
- * Mainly used to avoid fini() functions in the map handlers. E.g.: just
- * reuse "mapHandler" as id.
- */
-nmsData.unregisterHandlerWildcard = function(id) {
- for (var v in nmsData._sources) {
- this.unregisterHandler(v, id);
- }
-};
-
-nmsData.unregisterHandler = function(name, id) {
- delete this._sources[name].cbs[id];
-};
-
-/*
- * Updates a source.
- *
- * Called on interval, but can also be used to update a source after a
- * known action that updates the underlying data (e.g: update comments
- * after a comment is posted).
- */
-nmsData.updateSource = function(name) {
- /*
- * See comment in nms.js nmsINIT();
- */
- if (name == "ticker" ) {
- for (var i in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[i];
- if (tmp.cb != undefined) {
- tmp.cb(tmp.cbdata);
- }
- }
- return;
- }
- this._genericUpdater(name, true);
-};
-
-nmsData.invalidate = function(name) {
- this._genericUpdater(name, false);
-};
-/*
- * Reset a source, deleting all data, including old.
- *
- * Useful if traveling in time, for example.
- */
-nmsData.resetSource = function(name) {
- this[name] = {};
- this.old[name] = {};
- this.updateSource(name);
-};
-
-/*
- * Updates nmsData[name] and nmsData.old[name], issuing any callbacks where
- * relevant.
- *
- * Do not use this directly. Use updateSource().
- *
- */
-nmsData._genericUpdater = function(name, cacheok) {
- if (this.stats.outstandingAjaxRequests++ > this._ajaxThreshold) {
- this.stats.outstandingAjaxRequests--;
- this.stats.ajaxOverflow++;
- return;
- }
- var now = "";
- if (this._now != undefined)
- now = "now=" + this._now;
- if (now != "") {
- if (this._sources[name].target.match("\\?"))
- now = "&" + now;
- else
- now = "?" + now;
- }
- var heads = {};
- if (cacheok == false) {
- heads['Cache-Control'] = "max-age=0, no-cache, stale-while-revalidate=0";
- }
-
- $.ajax({
- type: "GET",
- headers: heads,
- url: this._sources[name].target + now,
- dataType: "json",
- success: function (data, textStatus, jqXHR) {
- if (nmsData[name] == undefined || nmsData[name]['hash'] != data['hash']) {
- nmsData._last = data['time'];
- nmsData.old[name] = nmsData[name];
- nmsData[name] = data;
- nmsMap.drawNow();
- for (var i in nmsData._sources[name].cbs) {
- var tmp2 = nmsData._sources[name].cbs[i];
- if (tmp2.cb != undefined) {
- tmp2.cb(tmp2.cbdata);
- }
- }
- } else {
- for (var j in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[j];
- if (tmp.cb != undefined && tmp.fresh) {
- nmsData._sources[name].cbs[j].fresh = false;
- tmp.cb(tmp.cbdata);
- }
- }
- nmsData.stats.identicalFetches++;
- }
- },
- complete: function(jqXHR, textStatus) {
- nmsData.stats.outstandingAjaxRequests--;
- }
- });
-};
diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js
deleted file mode 100644
index f4dcb49..0000000
--- a/web/nms.gathering.org/js/nms-info-box.js
+++ /dev/null
@@ -1,1177 +0,0 @@
-"use strict";
-
-/*
- * NMS info-window controller
- *
- * Interface: nmsInfoBox.showWindow(windowType,optionalParameter), nmsInfoBox.hide()
- *
- * Uses a basic hierarchy of window > views > panels, where each panel can work
- * independently, but gets loaded/unloaded when needed by window or view.
- *
- */
-
-/*
- *
- * Currently broken or needs reimplementing:
- * - Possibly: Comment CRUD, did not want to test writes on our "historic db copy"
- * - Comments popover
- * - Handler unloading is not working correctly, and many are never removed
- * - SSH-management link, this should propably be a custom "view" of sorts
- * - inventoryListing window is partially broken when first opened. Since it's
- * both a window type and a panel with different modes it has some conflicts.
- *
- * General TODO:
- * - Fix broken stuff
- * - Test comments
- * - Add external windows (timetravel, etc)
- * - Take a critical look at what methods/variables should be marked as "_"
- * - Currently argument is assumed to be a switch, this should not be the case
- * - Add some basic styling to separate panels visually when in the same view
- * - Add some movement/placement/size options to info window
- *
- */
-
-/*
- * Basic configuration
- */
-var nmsInfoBox = nmsInfoBox || {
- stats: {},
- _container: false, //Container window
- _windowHandler: false, //Window handler
- _sw: false, //Name of last switch opened, used for toggle-click
- _windowTypes: [
- {
- 'id': 'switchInfo',
- 'title': 'Switch info',
- 'views': {
- 'initial': {
- 'name': 'Switch summary',
- 'panels': ['switchComments','switchSummary']
- },
- 'details': {
- 'name': 'Switch details',
- 'panels': ['switchDetails']
- },
- 'ports': {
- 'name': 'SNMP - Ports',
- 'panels': ['switchSNMP:ports']
- },
- 'misc': {
- 'name': 'SNMP - Misc',
- 'panels': ['switchSNMP:misc']
- },
- 'comments': {
- 'name': 'Comments',
- 'panels': ['switchComments']
- },
- 'edit': {
- 'name': 'Edit',
- 'panels': ['switchEdit']
- }
- }
- },
- {
- 'id': 'addSwitch',
- 'title': 'Add new switch',
- 'views': {
- 'initial': {
- 'name': 'Add switch',
- 'panels': ['switchAdd']
- }
- }
- },
- {
- 'id': 'inventoryListing',
- 'title': 'Inventory listing',
- 'views': {
- 'initial': {
- 'name': 'Distro names',
- 'panels': ['inventoryListing:distro_name']
- },
- 'sysDescr': {
- 'name': 'System description',
- 'panels': ['inventoryListing:sysDescr']
- },
- 'jnxBoxSerialNo': {
- 'name': 'Serial numbers',
- 'panels': ['inventoryListing:jnxBoxSerialNo']
- }
- }
- }
- ],
- _panelTypes: {} //Populate by using the nmsInfoBox.addPanelType method
-};
-
-/*
- * Shows a window, and triggers initial load if needed
- */
-nmsInfoBox.showWindow = function (windowName,argument) {
- if(windowName == "switchInfo" && argument != '' && argument == this._sw) {
- nmsInfoBox.hide();
- return;
- }
-
- if(!this._container)
- this._load();
- if(!windowName)
- windowName = 'switchInfo';
-
- this._sw = argument;
-
- this._windowHandler.showWindow(windowName,argument)
- this._container.style.display = "block";
-};
-
-/*
- * Internal function to load and register the initial html objects
- */
-nmsInfoBox._load = function() {
- var infoBox = document.createElement("div");
- infoBox.classList.add("panel", "panel-default");
- var title = document.createElement("div");
- title.id = "info-box-title";
- title.classList.add("panel-heading");
- var nav = document.createElement("div");
- nav.id = "info-box-nav";
- nav.classList.add("panel-body");
- var body = document.createElement("div");
- body.id = "info-box-body";
- body.classList.add("panel-body");
-
- infoBox.appendChild(title);
- infoBox.appendChild(nav);
- infoBox.appendChild(body);
-
- this._container = document.getElementById("info-box-container");
- this._container.appendChild(infoBox);
-
- this._windowHandler = new windowHandler();
- this._windowHandler.setContainerObj(document.getElementById("info-box-container"));
- this._windowHandler.setTitleObj(document.getElementById("info-box-title"));
- this._windowHandler.setBodyObj(document.getElementById("info-box-body"));
- this._windowHandler.setNavObj(document.getElementById("info-box-nav"));
- this._windowHandler.setPanelTypes(this._panelTypes);
- this._windowHandler.setWindowTypes(this._windowTypes);
-};
-
-/*
- * Adds a panel type to _panelTypes for usage in windows and views
- */
-nmsInfoBox.addPanelType = function (id, obj) {
- this._panelTypes[id] = obj;
-};
-
-
-/*
- * Hide the active window and tell it to unload
- */
-nmsInfoBox.hide = function() {
- this._sw = false;
- this._windowHandler.hide();
- this._windowHandler.unloadWindow();
-};
-
-/*
- * Click a switch and display it.
- */
-nmsInfoBox.click = function(sw)
-{
- this.showWindow("switchInfo",sw);
-};
-
-/*
- * Window handler
- *
- * Is based on a hierarchy of objects: Window (itself) > Views > Panels. Where
- * any object should not interact with any other directly. Panels are special
- * nmsInfoPanel-objects that handle their own rendering, refreshing, etc. The
- * window handler only makes shure these panels are loaded and unloaded when
- * needed in a window or view.
- *
- * Does primarily rely on an imported list of panel types and window types to
- * display stuff, but has methods for manual overrides if needed.
- *
- * Panels can use the doInPanel(panelId,functionName,arguments) method to pass
- * actions to themselves if needed.
- *
- */
-var windowHandler = function () {
- this.containerObj = false;
- this.titleObj = false;
- this.navObj = false;
- this.bodyObj = false;
- this._panels = {};
- this._view = "";
- this._window = {};
- this.windowTypes = false;
- this.panelTypes = false;
- this.argument = false;
- this.show = function () {
- this.containerObj.classList.remove("hidden");
- };
- this.hide = function () {
- this.containerObj.classList.add("hidden");
- };
- this.setContainerObj = function (containerObj) {
- this.containerObj = containerObj;
- };
- this.setTitleObj = function (titleObj) {
- this.titleObj = titleObj;
- };
- this.setNavObj = function (navObj) {
- this.navObj = navObj;
- };
- this.setBodyObj = function (bodyObj) {
- this.bodyObj = bodyObj;
- };
- this.setPanelTypes = function (panelTypes) {
- this.panelTypes = panelTypes;
- };
- this.setWindowTypes = function (windowTypes) {
- this.windowTypes = {};
- for(var i in windowTypes) {
- this.windowTypes[windowTypes[i].id] = windowTypes[i];
- }
- };
- this.setArgument = function (argument) {
- if(this.argument != argument) {
- this.argument = argument;
- this.showView(this._view);
- }
- };
- this.showPanel = function (panelName) {
- var panelArray = panelName.split(":");
- var panelName = panelArray[0];
- var panelMode = panelArray[1];
- if(this.panelTypes[panelName]) {
- var id = (Math.random().toString(36)+'00000000000000000').slice(2, 10+2);
- var panel = new this.panelTypes[panelName];
- panel.setId(id);
- if(!!panelMode)
- panel.setMode(panelMode);
- panel.load(this.bodyObj,this.argument);
- this._panels[id] = panel;
- }
- };
- this.showTitle = function (title) {
- this.titleObj.innerHTML = '<button type="button" class="close" aria-label="Close" onclick="nmsInfoBox.hide();" style="float: right;"><span aria-hidden="true">&times;</span></button><h4>' + title + '</h4>';
- };
- this.showNav = function () {
- if(!this._window.views)
- this.navObj.innerHTML = '';
- var output = '<ul class="nav nav-pills small">';
- var i = 0;
- for(var view in this._window.views) {
- var viewObj = this._window.views[view];
- var active = '';
- if(this._view == view)
- active = ' class="active" ';
- output += '<li' + active + '><a class="' + view + '" aria-label="' + viewObj.name + '" onclick="nmsInfoBox._windowHandler.showView(\'' + view + '\');">' + viewObj.name + '</a></li> ';
- i++;
- }
- output += '</ul>';
- if(i < 2) {
- this.navObj.innerHTML = '';
- } else {
- this.navObj.innerHTML = output;
- }
- };
- this.addWindow = function (windowObj) {
- this.windowTypes[windowObj.id] = windowObj;
- };
- this.showWindow = function (windowName,argument) {
- if(!this.windowTypes[windowName])
- return;
- this.unloadWindow();
- this.argument = argument;
- this._window = this.windowTypes[windowName];
- this.showTitle(this._window.title);
- this.showView();
- this.show();
- };
- this.showView = function (viewId) {
- if(!viewId || viewId == '')
- viewId = "initial";
- if(!this._window.views || !this._window.views[viewId])
- return;
- this.unloadView();
- for(var panel in this._window.views[viewId].panels) {
- this.showPanel(this._window.views[viewId].panels[panel]);
- }
- this._view = viewId;
- this.showNav();
- };
- this.removePanel = function (panelId) {
- if(!!panelId)
- this.unloadPanel(panelId);
- };
- this.unloadView = function () {
- this.unloadPanel();
- };
- this.unloadWindow = function() {
- this.hide();
- this.unloadPanel();
- };
- this.unloadPanel = function (panelId) {
- if(!panelId) {
- for(var i in this._panels) {
- this._panels[i].unload();
- }
- this._panels = {};
- } else {
- try {
- this._panels[panelId].unload();
- } catch (e) {}
- delete this._panels[panelId];
- }
- };
- //Method for triggering a function in an active panel
- this.doInPanel = function (panelId, action, argument) {
- if(!this._panels[panelId])
- return;
- if(typeof this._panels[panelId][action] === "function") {
- if(!argument) {
- this._panels[panelId][action]();
- } else {
- this._panels[panelId][action](argument);
- }
- }
- };
-};
-
-/*
- * Basic info-panel object
- *
- * Has a basic model of a stand alone panel which is intended to be extended
- * upon to implement specific panels:
- *
- * var myNewPanel = function () {
- * nmsInfoPanel.call(this,"myNewPanelId");
- * this.refresh = function (reason) {
- * //My custom window function
- * this._render(htmlObj);
- * };
- * };
- *
- */
-var nmsInfoPanel = function nmsInfoPanel(name,id) {
- this.name = name;
- this.id = id;
- this.sw = false;
- this.container = false;
- this.classList = ['info-panel'];
- this.me = false;
- this.handlers = [];
- this.mode = "initial";
-
- if(!this.id)
- this.id = (Math.random().toString(36)+'00000000000000000').slice(2, 10+2);
-
- //Method for loading the general panel properties
- this.load = function (container,argument) {
- this.container = container;
- this.sw = argument;
- this.me = document.createElement("div");
- this.me.id = this.id;
- for(var i in this.classList)
- this.me.classList.add(this.classList[i]);
- this.container.appendChild(this.me);
- this.init(argument);
- };
-
- //Method for making this specific panel-instance ready for first refresh
- //Override in children when any custom init-functionality is needed
- this.init = function (argument) {
- this.refresh("init");
- };
-
- //Methods for getting and setting panel id
- this.setId = function (id) {
- this.id = id;
- };
- this.getId = function () {
- return this.id;
- };
-
- //Methods for setting and getting mode (default "initial")
- this.setMode = function (mode) {
- this.mode = mode;
- };
- this.getMode = function () {
- return this.mode;
- };
-
- //Internal method for rendering content
- this._render = function (newContent) {
- if(!newContent || !this.me)
- return;
- this.me.innerHTML = newContent.outerHTML;
- };
-
- //Helper method for rendering error messages in a unified way
- this._renderError = function (message) {
- var error = document.createElement("div");
- error.className = "alert alert-info";
- error.innerHTML = message;
- this._render(error);
- };
-
- //Method for unloading any local data
- this.unload = function () {
- if(!this.me)
- return;
- this.me.remove();
- this.sw = false;
- this.container = false;
- this.me = false;
- this.id = false;
- this.removeHandlers();
- };
-
- //Method for loading new data and triggering a _render if needed
- //Implemented in children only
- this.refresh = function (reason) {};
-
- //Methods for adding and removing classes
- this.addClass = function (className) {
- if(this.classList.indexOf(className) == -1) {
- this.classList.push(className);
- this.me.classList.add(className);
- }
- };
- this.removeClass = function (className) {
- var index = this.classList.indexOf(className);
- if(index != -1) {
- this.classList.splice(index,1);
- this.me.classList.remove(className);
- }
- };
-
- //Method for registering a data handler (lets us clean them up later)
- this.addHandler = function (dataType,targetFunction) {
- if(!targetFunction)
- targetFunction = "refresh";
- nmsData.addHandler(dataType,this.id,(this[targetFunction]).bind(this),"handler-"+dataType);
- this.handlers.push(dataType);
- };
-
- //Method for removing all handlers we have registered
- this.removeHandlers = function () {
- for(var i in this.handlers) {
- nmsData.unregisterHandler(this.handlers[i],this.id);
- }
- };
-
- //Method for checking if we have handlers registered
- this.hasHandler = function (dataType) {
- for(var i in this.handlers) {
- if(this.handlers[i] == dataType)
- return true;
- }
- return false;
- };
-};
-
-/*
- * Panel type: Switch SNMP information
- *
- * Displays a list of available SNMP data from a set SNMP-group (Ex. "Ports", "Misc")
- *
- * TODO: Clean up html-generator code.
- *
- */
-var switchSNMPPanel = function () {
- nmsInfoPanel.call(this,"switchSNMP");
- this.init = function() {
- this.addHandler("snmp");
- this.refresh();
- };
- this.refresh = function(reason) {
- var domObj = document.createElement("div");
- domObj.classList.add("panel-group");
-
- try {
- var snmpJson = nmsData.snmp.snmp[this.sw][this.mode];
- } catch(e) {
- this._renderError("Waiting for data.");
- return;
- }
-
- for(var obj in snmpJson) {
-
- var cleanObj = obj.replace(/\W+/g, "");
-
- var groupObj = document.createElement("div");
- groupObj.classList.add("panel","panel-default");
- groupObj.innerHTML = '<a class="panel-heading collapse-controller" style="display:block;" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + obj + '</a>';
-
- var groupObjCollapse = document.createElement("div");
- groupObjCollapse.id = cleanObj + "-group";
- groupObjCollapse.classList.add("collapse");
-
- var panelBodyObj = document.createElement("div");
- panelBodyObj.classList.add("panel-body");
-
- var tableObj = document.createElement("table");
- tableObj.classList.add("table","table-condensed");
-
- var tbody = document.createElement("tbody");
-
- for(var prop in snmpJson[obj]) {
- var propObj = document.createElement("tr");
- propObj.innerHTML = '<td>' + prop + '</td><td>' + snmpJson[obj][prop] + '</td>';
- tbody.appendChild(propObj);
- }
-
- tableObj.appendChild(tbody);
- panelBodyObj.appendChild(tableObj);
- groupObjCollapse.appendChild(panelBodyObj);
- groupObj.appendChild(groupObjCollapse);
- domObj.appendChild(groupObj);
-
- }
-
- this._render(domObj);
- };
-};
-nmsInfoBox.addPanelType("switchSNMP",switchSNMPPanel);
-
-/*
- * Panel type: Switch details
- *
- * Displays a table of switch information
- *
- */
-var switchDetailsPanel = function() {
- nmsInfoPanel.call(this,"switchDetails");
- this.refresh = function(reason) {
- var swi = [];
- var swm = [];
- try {
- swi = nmsData.switches["switches"][this.sw];
- } catch(e) {}
- try {
- swm = nmsData.smanagement.switches[this.sw];
- } catch(e) {}
-
- var content = [];
-
- for (var v in swi) {
- if (v == "placement") {
- var place = JSON.stringify(swi[v]);
- content.push([v,place]);
- continue;
- }
- content.push([v, swi[v]]);
- }
-
- for (var v in swm) {
- content.push([v, swm[v]]);
- }
- content.sort();
-
- var infotable = nmsInfoBox._makeTable(content);
-
- this._render(infotable);
- };
-};
-nmsInfoBox.addPanelType("switchDetails",switchDetailsPanel);
-
-/*
- * Panel type: Add switch
- *
- * Lets you add a new switch using the switch-add api
- *
- */
-var switchAddPanel = function() {
- nmsInfoPanel.call(this,"switchAdd");
- this.refresh = function(reason) {
- var domObj = document.createElement("div");
- domObj.innerHTML = '<input type="text" class="form-control" id="create-sysname" placeholder="Sysname id"><button class="btn btn-default" onclick="nmsInfoBox._windowHandler.doInPanel(\'' + this.id +'\',\'save\');">Add switch</button>'
- this._render(domObj);
- };
- this.save = function () {
- var sysname = document.getElementById('create-sysname').value;
- var myData = JSON.stringify([{'sysname':sysname}]);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-add",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- var result = JSON.parse(data);
- if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded
- nmsInfoBox.hide();
- }
- nmsData.invalidate("switches");
- nmsData.invalidate("smanagement");
- }
- });
- };
-};
-nmsInfoBox.addPanelType("switchAdd",switchAddPanel);
-
-/*
- * Panel type: Inventory listing
- *
- * Displays a filterable table with switch data, based on a selected mode
- *
- * TODO:
- * - Add support for multiple columns with data
- * - Add sorting
- * - Add live filtering
- * - Add export options?
- *
- */
-var inventoryListingPanel = function() {
- nmsInfoPanel.call(this,"inventoryListing");
- this.filter = "";
- this.init = function (mode) {
- if(!nmsData.snmp || !nmsData.snmp.snmp) {
- if(!this.hasHandler("snmp")) {
- this.addHandler("snmp","init");
- this._renderError("Waiting for SNMP data.");
- }
- return;
- } else {
- this.removeHandlers();
- if(!!mode && this.mode == "initial")
- this.setMode(mode);
- this.refresh("init");
- }
- };
- this.setFilter = function (filter) {
- this.filter = filter;
- this.refresh();
- };
- this.refresh = function (reason) {
- var targetArray = [];
- var listTitle = '';
- var contentObj = document.createElement("div");
- var inputObj = document.createElement("div");
- inputObj.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Filter" id="inventorylisting-filter" value="' + this.filter + '" onkeyup="if (event.keyCode == 13) {nmsInfoBox._windowHandler.doInPanel(\'' + this.id + '\',\'setFilter\',document.getElementById(\'inventorylisting-filter\').value);}"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="nmsInfoBox._windowHandler.doInPanel(\'' + this.id + '\',\'setFilter\',document.getElementById(\'inventorylisting-filter\').value);">Filtrer</button></span></div>';
- contentObj.appendChild(inputObj);
-
- switch (this.mode) {
- case 'distro_name':
- listTitle = 'Distro names';
- break;
- case 'sysDescr':
- listTitle = 'System description';
- break;
- case 'jnxBoxSerialNo':
- listTitle = 'Serial Numbers';
- break;
- default:
- listTitle = 'Distro names';
- }
-
- var resultArray = [];
- for(var sw in nmsData.switches.switches) {
- var value = '';
- if(this.filter != '') {
- if(sw.toLowerCase().indexOf(this.filter) == -1 && !nmsInfoBox._searchSmart(this.filter,sw))
- continue;
- }
- try {
- switch (this.mode) {
- case 'distro_name':
- value = nmsData.switches.switches[sw]["distro_name"];
- break;
- case 'sysDescr':
- value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
- break;
- case 'jnxBoxSerialNo':
- value = nmsData.snmp.snmp[sw]["misc"]["jnxBoxSerialNo"][0];
- break;
- }
- } catch (e) {}
- resultArray.push([sw, value]);
- }
-
- resultArray.sort();
-
- var infotable = nmsInfoBox._makeTable(resultArray,listTitle);
- infotable.id = "inventory-table";
-
- contentObj.appendChild(infotable);
- this._render(contentObj);
- };
-};
-nmsInfoBox.addPanelType("inventoryListing",inventoryListingPanel);
-
-/*
- * Panel type: Edit switch
- *
- * Lets you edit basic switch and switch management data through the switch-update api
- *
- */
-var switchEditPanel = function () {
- nmsInfoPanel.call(this,"switchEdit");
- this.refresh = function (reason) {
- var swi = [];
- var swm = [];
- try {
- swi = nmsData.switches["switches"][this.sw];
- } catch(e) {}
- try {
- swm = nmsData.smanagement.switches[this.sw];
- } catch(e) {}
-
- var domObj = document.createElement("div");
- var template = {};
-
- nmsInfoBox._editValues = {};
- var place;
- for (var v in swi) {
- if (v == "placement") {
- place = JSON.stringify(swi[v]);
- template[v] = place;
- continue;
- }
- template[v] = nmsInfoBox._nullBlank(swi[v]);
- }
- for (var v in swm) {
- template[v] = nmsInfoBox._nullBlank(swm[v]);
- }
- var content = [];
- for (v in template) {
- var tmpsw = '\'' + this.sw + '\'';
- var tmpv = '\'' + v + '\'';
- var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"';
- var html = '<input type="text" class="form-control" value="' + template[v] + '" id="edit-' + this.sw + '-' + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '>';
- content.push([v, html]);
- }
-
- content.sort();
-
- var table = nmsInfoBox._makeTable(content, "edit");
- domObj.appendChild(table);
-
- var submit = document.createElement("button");
- submit.innerHTML = "Save changes";
- submit.classList.add("btn", "btn-primary");
- submit.id = "edit-submit-" + this.sw;
- submit.setAttribute("onclick","nmsInfoBox._windowHandler.doInPanel('" + this.id + "','save');");
- domObj.appendChild(submit);
-
- var output = document.createElement("output");
- output.id = "edit-output";
- domObj.appendChild(output);
-
- if (place) {
- var pval = document.getElementById("edit-" + this.sw + "-placement");
- if (pval) {
- pval.value = place;
- }
- }
-
- this._render(domObj);
- };
- this.save = function () {
- var myData = nmsInfoBox._editStringify(this.sw);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-update",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- var result = JSON.parse(data);
- if(result.switches_updated.length > 0) { // FIXME unresolved variable switches_addded
- nmsInfoBox.hide();
- }
- nmsData.invalidate("switches");
- nmsData.invalidate("smanagement");
- }
- });
- };
-};
-nmsInfoBox.addPanelType("switchEdit",switchEditPanel);
-
-/*
- * Panel type: Switch comments
- *
- * Displays the current comments and lets you interact with them or add new ones
- *
- * TODO: Test with a dummy-db to make sure everything still works properly
- *
- */
-var switchCommentsPanel = function () {
- nmsInfoPanel.call(this,"switchComments");
- this.commentsHash = false;
- this.refresh = function (reason) {
- var domObj = document.createElement("div");
- var comments = [];
-
- var commentbox = document.createElement("div");
- commentbox.id = "commentbox";
- commentbox.className = "panel-body";
- commentbox.style.width = "100%";
- commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>';
-
- // We have data
- if(!(!nmsData.comments || !nmsData.comments.comments)) {
- this.commentsHash = nmsData.comments.hash;
-
- // We have data for this switch
- if(nmsData.comments.comments[this.sw]) {
- this.commentsHash = nmsData.comments.hash;
- for (var c in nmsData.comments.comments[this.sw]["comments"]) {
- var comment = nmsData.comments.comments[this.sw]["comments"][c];
- if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") {
- comments.push(comment);
- }
- }
-
- if (comments.length > 0) {
- var commenttable = nmsInfoBox._makeCommentTable(comments);
- commenttable.id = "info-switch-comments-table";
- domObj.appendChild(commenttable);
- }
-
- }
- }
-
- domObj.appendChild(commentbox);
- this._render(domObj);
- };
-};
-nmsInfoBox.addPanelType("switchComments",switchCommentsPanel);
-
-/*
- * Panel type: Switch summary
- *
- * Display a live summary of key metrics
- *
- */
-var switchSummaryPanel = function() {
- nmsInfoPanel.call(this,"switchSummary");
- this.init = function() {
- this.addHandler("ticker");
- this.refresh();
- };
- this.refresh = function(reason) {
- var content = [];
-
- //Get DHCP info
- var lastDhcp = undefined;
- try {
- var tempDhcp = nmsData.dhcp.dhcp[this.sw];
- var now = Date.now();
- now = Math.floor(now / 1000);
- tempDhcp = now - parseInt(tempDhcp);
- tempDhcp = tempDhcp + " s";
- } catch(e) {}
-
- //Get SNMP status
- var snmpStatus = undefined;
- try {
- if (nmsData.snmp.snmp[this.sw].misc.sysName[0] != sw) {
- snmpStatus = "Sysname mismatch";
- } else {
- snmpStatus = "OK";
- }
- } catch(e) {}
-
- //Get CPU usage
- var cpuUsage = undefined;
- try {
- var cpu = 0;
- for (var u in nmsData.snmp.snmp[this.sw].misc.jnxOperatingCPU) {
- var local = nmsData.snmp.snmp[this.sw].misc['jnxOperatingCPU'][u];
- cpu = Math.max(nmsData.snmp.snmp[this.sw].misc.jnxOperatingCPU[u],cpu);
- }
- cpuUsage = cpu + " %";
- } catch (e) {}
-
- //Get traffic data
- var uplinkTraffic = undefined;
- try {
- var speed = 0;
- var t = parseInt(nmsData.switchstate.then[this.sw].uplinks.ifHCOutOctets);
- var n = parseInt(nmsData.switchstate.switches[this.sw].uplinks.ifHCOutOctets);
- var tt = parseInt(nmsData.switchstate.then[this.sw].time);
- var nt = parseInt(nmsData.switchstate.switches[this.sw].time);
- var tdiff = nt - tt;
- var diff = n - t;
- speed = diff / tdiff;
- if(!isNaN(speed)) {
- uplinkTraffic = byteCount(speed*8,0);
- }
- } catch (e) {};
-
- //Get uptime data
- var uptime = "";
- try {
- uptime = nmsData.snmp.snmp[this.sw]["misc"]["sysUpTimeInstance"][""] / 60 / 60 / 100;
- uptime = Math.floor(uptime) + " t";
- } catch(e) {}
-
- //Get temperature data
- var temp = "";
- try {
- temp = nmsData.switchstate.switches[this.sw].temp + " °C";
- } catch(e) {}
-
- //Get management data
- var mgmtV4 = "";
- var mgmtV6 = "";
- var subnetV4 = "";
- var subnetV6 = "";
- try {
- mgmtV4 = nmsData.smanagement.switches[this.sw].mgmt_v4_addr;
- mgmtV6 = nmsData.smanagement.switches[this.sw].mgmt_v6_addr;
- subnetV4 = nmsData.smanagement.switches[this.sw].subnet4;
- subnetV6 = nmsData.smanagement.switches[this.sw].subnet6;
- } catch(e) {}
-
- //Get ping data
- var ping = undefined;
- try {
- nmsData.ping.switches[this.sw].latency + " ms";
- } catch (e) {}
-
-
- content.push(["Ping latency:",ping]);
- content.push(["Last DHCP lease:",lastDhcp]);
- content.push(["SNMP status:",snmpStatus]);
- content.push(["CPU usage:",cpuUsage]);
- content.push(["Uplink traffic:",uplinkTraffic]);
- content.push(["System uptime:",uptime]);
- content.push(["Temperature",temp]);
- content.push(["Management (v4):",mgmtV4]);
- content.push(["Management (v6):",mgmtV6]);
- content.push(["Subnet (v4):",subnetV4]);
- content.push(["Subnet (v6):",subnetV6]);
-
- var contentCleaned = [];
- for(var i in content) {
- if(content[i][1] == '' || content[i][1] == null)
- continue;
- if(content[i][1] == undefined || content[i][1])
- content[i][1] == "No data";
- contentCleaned.push(content[i]);
- }
-
- var table = nmsInfoBox._makeTable(contentCleaned);
-
- this._render(table);
- };
-};
-nmsInfoBox.addPanelType("switchSummary",switchSummaryPanel);
-
-/*
- * General-purpose table-maker?
- *
- * Takes an array of arrays as input, and an optional caption.
- *
- * E.g.: _makeTable([["name","Kjell"],["Age","five"]], "Age list");
- */
-nmsInfoBox._makeTable = function(content, caption) {
- var table = document.createElement("table");
- var tr;
- var td1;
- var td2;
- table.className = "table";
- table.classList.add("table");
- table.classList.add("table-condensed");
- if (caption != undefined) {
- var cap = document.createElement("caption");
- cap.textContent = caption;
- table.appendChild(cap);
- }
- for (var v in content) {
- tr = table.insertRow(-1);
- tr.className = content[v][0].toLowerCase();
- td1 = tr.insertCell(0);
- td2 = tr.insertCell(1);
- td1.innerHTML = content[v][0];
- td2.innerHTML = content[v][1];
- }
- return table;
-};
-
-/*
- * Create and return a table for comments.
- *
- * Input is an array of comments.
- */
-nmsInfoBox._makeCommentTable = function(content) {
- var table = document.createElement("table");
- table.className = "table";
- table.classList.add("table");
- table.classList.add("table-condensed");
- var cap = document.createElement("caption");
- cap.textContent = "Comments"
- table.appendChild(cap);
- for (var commentid in content) {
- var tr;
- var td1;
- var td2;
- var comment = content[commentid];
- var col;
- if (comment["state"] == "active")
- col = "danger";
- else if (comment["state"] == "inactive")
- col = false;
- else
- col = "info";
- tr = table.insertRow(-1);
- tr.id = "commentRow" + comment["id"];
- tr.className = col;
-
- td1 = tr.insertCell(0);
- td1.style.whiteSpace = "nowrap";
- td1.style.width = "8em";
- td2 = tr.insertCell(1);
- var txt = '<div class="btn-group" role="group" aria-label="..."><button type="button" class="btn btn-xs btn-default" data-trigger="focus" data-toggle="popover" title="Info" data-content="Comment added ' + comment["time"] + " by user " + comment["username"] + ' and listed as ' + comment["state"] + '"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-danger" data-trigger="focus" data-toggle="tooltip" title="Mark as deleted" onclick="commentDelete(' + comment["id"] + ');"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-success" data-trigger="focus" data-toggle="tooltip" title="Mark as inactive/fixed" onclick="commentInactive(' + comment["id"] + ');"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>';
- txt += '<button type="button" class="btn btn-xs btn-info" data-trigger="focus" data-toggle="tooltip" title="Mark as persistent" onclick="commentPersist(' + comment["id"] + ');"><span class="glyphicon glyphicon-star" aria-hidden="true"></span></button></div>';
- td1.innerHTML = txt;
- td2.innerHTML = comment["comment"];
- }
- return table;
-};
-
-nmsInfoBox._searchSmart = function(id, sw) {
- try {
- try {
- if (nmsData.switches.switches[sw].distro_name.toLowerCase() == id) {
- return true;
- }
- } catch (e) {}
- try {
- if (id.match("active")) {
- var limit = id;
- limit = limit.replace("active>","");
- limit = limit.replace("active<","");
- limit = limit.replace("active=","");
- var operator = id.replace("active","")[0];
- if (limit == parseInt(limit)) {
- var ports = parseInt(nmsData.switchstate.switches[sw].ifs.ge.live);
- limit = parseInt(limit);
- if (operator == ">" ) {
- if (ports > limit) {
- return true;
- }
- } else if (operator == "<") {
- if (ports < limit) {
- return true;
- }
- } else if (operator == "=") {
- if (ports == limit) {
- return true;
- }
- }
- }
- }
- } catch (e) {}
- try {
- if (nmsData.smanagement.switches[sw].mgmt_v4_addr.match(id)) {
- return true;
- }
- if (nmsData.smanagement.switches[sw].mgmt_v6_addr.match(id)) {
- return true;
- }
- } catch (e) {}
- try {
- if (nmsData.smanagement.switches[sw].subnet4.match(id)) {
- return true;
- }
- if (nmsData.smanagement.switches[sw].subnet6.match(id)) {
- return true;
- }
- } catch (e) {}
- if (nmsData.snmp.snmp[sw].misc.sysDescr[0].toLowerCase().match(id)) {
- return true;
- }
- } catch (e) {
- return false;
- }
- return false;
-};
-
-/*
- * FIXME: Not sure this belongs here, it's really part of the "Core" ui,
- * not just the infobox.
- */
-nmsInfoBox._search = function() {
- var el = document.getElementById("searchbox");
- var id = false;
- var matches = [];
- if (el) {
- id = el.value.toLowerCase();
- }
- if(id) {
- nmsMap.enableHighlights();
- for(var sw in nmsData.switches.switches) {
- if(sw.toLowerCase().indexOf(id) > -1) {
- matches.push(sw);
- nmsMap.setSwitchHighlight(sw,true);
- } else if (nmsInfoBox._searchSmart(id,sw)) {
- matches.push(sw);
- nmsMap.setSwitchHighlight(sw,true);
- } else {
- nmsMap.setSwitchHighlight(sw,false);
- }
- }
- } else {
- nmsMap.disableHighlights();
- }
- if(matches.length == 1) {
- document.getElementById("searchbox-submit").classList.add("btn-primary");
- document.getElementById("searchbox").dataset.match = matches[0];
- } else {
- document.getElementById("searchbox-submit").classList.remove("btn-primary");
- document.getElementById("searchbox").dataset.match = '';
- }
-};
-
-nmsInfoBox._searchKeyListener = function(e) {
- switch (e.keyCode) {
- case 13:
- var sw = document.getElementById("searchbox").dataset.match;
- if(sw != '') {
- nmsInfoBox.showWindow("switchInfo",sw);
- }
- break;
- case 27:
- document.getElementById("searchbox").dataset.match = '';
- document.getElementById("searchbox").value = '';
- nmsInfoBox._search();
- nmsInfoBox.hide();
- break;
- }
-};
-
-nmsInfoBox._nullBlank = function(x) {
- if (x == null || x == false || x == undefined)
- return "";
- return x;
-};
-
-nmsInfoBox._editChange = function(sw, v) {
- var el = document.getElementById("edit-" + sw + "-" + v);
- var val = el.value;
- if (v == "placement") {
- try {
- val = JSON.parse(val);
- el.parentElement.classList.remove("has-error");
- el.parentElement.classList.add("has-success");
- } catch (e) {
- el.parentElement.classList.add("has-error");
- return;
- }
- }
- nmsInfoBox._editValues[v] = val;
- el.classList.add("has-warning");
- var myData = nmsInfoBox._editStringify(sw);
- var out = document.getElementById("edit-output");
- out.value = myData;
-};
-
-nmsInfoBox._editStringify = function(sw) {
- nmsInfoBox._editValues['sysname'] = sw;
- return JSON.stringify([nmsInfoBox._editValues]);
-};
diff --git a/web/nms.gathering.org/js/nms-map-handlers.js b/web/nms.gathering.org/js/nms-map-handlers.js
deleted file mode 100644
index a7672a3..0000000
--- a/web/nms.gathering.org/js/nms-map-handlers.js
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * Map handlers/updaters for NMS.
- *
- * These are functions used to determine how the map should look in NMS.
- * They represent vastly different information, but in a uniform way.
- *
- * The idea is that these updaters only parse information that's fetched by
- * NMS - they do not request additional information. E.g., ping data is
- * always present, but until the ping-handler is active, it isn't
- * displayed. This might seem redundant, but it means any handler can
- * utilize information from any aspect of NMS, and thus opens NMS up to the
- * world of intelligent maps base don multiple data sources.
- *
- * Warning: This paradigm will change. Handlers will be expected to
- * register their own callbacks for nmsData. Work in progress.
- *
- */
-
-/*
- */
-
-var handler_uplinks = {
- init:uplinkInit,
- tag:"uplink",
- name:"Uplink map"
-};
-
-var handler_temp = {
- init:tempInit,
- tag:"temp",
- name:"Temperature map"
-};
-
-var handler_ping = {
- init:pingInit,
- tag:"ping",
- name:"IPv4 Ping map"
-};
-
-var handler_traffic = {
- init:trafficInit,
- tag:"traffic",
- name:"Uplink traffic map"
-};
-
-var handler_traffic_tot = {
- init:trafficTotInit,
- tag:"traffictot",
- name:"Switch traffic map"
-};
-
-var handler_dhcp = {
- init:dhcpInit,
- tag:"dhcp",
- name:"DHCP map"
-};
-
-var handler_disco = {
- init:discoInit,
- tag:"disco",
- name:"Disco fever"
-};
-
-var handler_comment = {
- init:commentInit,
- tag:"comment",
- name:"Fresh comment spotter"
-};
-
-var handler_snmp = {
- init:snmpInit,
- tag:"snmp",
- name:"SNMP state"
-};
-
-var handler_cpu = {
- init:cpuInit,
- tag:"cpu",
- name:"CPU utilization"
-};
-
-var handlers = [
- handler_uplinks,
- handler_temp,
- handler_ping,
- handler_traffic,
- handler_disco,
- handler_comment,
- handler_traffic_tot,
- handler_dhcp,
- handler_snmp,
- handler_cpu
- ];
-
-/*
- * Update function for uplink map
- */
-function uplinkUpdater()
-{
- if (!nmsData.switches)
- return;
- if (!nmsData.switches.switches)
- return;
- if (!nmsData.switchstate)
- return;
- if (!nmsData.switchstate.switches)
- return;
- for (var sw in nmsData.switches.switches) {
- var uplinks=0;
- if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) {
- uplinks=0;
- } else {
- uplinks = nmsData.switchstate.switches[sw].uplinks.live;
- nuplinks = nmsData.switchstate.switches[sw].uplinks.total;
- }
-
- if (uplinks == 0) {
- nmsMap.setSwitchColor(sw,"white");
- } else if (uplinks == 1) {
- nmsMap. setSwitchColor(sw, red);
- } else if (uplinks == 2) {
- nmsMap.setSwitchColor(sw, orange);
- } else if (uplinks == 3) {
- nmsMap.setSwitchColor(sw,green);
- } else if (uplinks > 3) {
- nmsMap.setSwitchColor(sw, blue);
- }
- }
-}
-
-/*
- * Init-function for uplink map
- */
-function uplinkInit()
-{
- nmsData.addHandler("switches","mapHandler",uplinkUpdater);
- nmsData.addHandler("switchstate","mapHandler",uplinkUpdater);
- setLegend(1,"white","0 uplinks");
- setLegend(2,red,"1 uplink");
- setLegend(3,orange,"2 uplinks");
- setLegend(4,green,"3 uplinks");
- setLegend(5,blue,"4 uplinks");
-}
-
-/*
- * Init-function for uplink map
- */
-function trafficInit()
-{
- nmsData.addHandler("switches","mapHandler",trafficUpdater);
- nmsData.addHandler("switchstate","mapHandler",trafficUpdater);
- var m = 1024 * 1024 / 8;
- drawGradient([lightgreen,green,orange,red]);
- setLegend(1,colorFromSpeed(0),"0 (N/A)");
- setLegend(5,colorFromSpeed(1100 * m) , "1100Mb/s");
- setLegend(4,colorFromSpeed(600 * m),"600Mb/s");
- setLegend(3,colorFromSpeed(300 * m),"300Mb/s");
- setLegend(2,colorFromSpeed(10 * m),"10Mb/s");
-}
-
-function trafficUpdater()
-{
- if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
- return;
- for (var sw in nmsData.switchstate.switches) {
- var speed = 0;
- try {
- var t = parseInt(nmsData.switchstate.then[sw].uplinks.ifHCOutOctets);
- var n = parseInt(nmsData.switchstate.switches[sw].uplinks.ifHCOutOctets);
- var tt = parseInt(nmsData.switchstate.then[sw].time);
- var nt = parseInt(nmsData.switchstate.switches[sw].time);
- } catch (e) { continue;};
- var tdiff = nt - tt;
- var diff = n - t;
- speed = diff / tdiff;
- if(!isNaN(speed)) {
- nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
- nmsMap.setSwitchInfo(sw,byteCount(speed*8,0));
- }
- }
-}
-
-function trafficTotInit()
-{
- nmsData.addHandler("switches","mapHandler",trafficTotUpdater);
- nmsData.addHandler("switchstate","mapHandler",trafficTotUpdater);
- var m = 1024 * 1024 / 8;
- drawGradient([lightgreen,green,orange,red]);
- setLegend(1,colorFromSpeed(0),"0 (N/A)");
- setLegend(5,colorFromSpeed(5000 * m,5) , "5000Mb/s");
- setLegend(4,colorFromSpeed(3000 * m,5),"3000Mb/s");
- setLegend(3,colorFromSpeed(1000 * m,5),"1000Mb/s");
- setLegend(2,colorFromSpeed(100 * m,5),"100Mb/s");
-}
-
-function trafficTotUpdater()
-{
- if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
- return;
- for (var sw in nmsData.switchstate.switches) {
- var speed = 0;
- try {
- var t = parseInt(nmsData.switchstate.then[sw].totals.ifHCOutOctets);
- var n = parseInt(nmsData.switchstate.switches[sw].totals.ifHCOutOctets);
- var tt = parseInt(nmsData.switchstate.then[sw].time);
- var nt = parseInt(nmsData.switchstate.switches[sw].time);
- } catch (e) { continue;};
- var tdiff = nt - tt;
- var diff = n - t;
- speed = diff / tdiff;
- if(!isNaN(speed))
- nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
- }
-}
-
-function colorFromSpeed(speed,factor)
-{
- var m = 1024 * 1024 / 8;
- if (factor == undefined)
- factor = 1.1;
- if (speed == 0)
- return blue;
- speed = speed < 0 ? 0 : speed;
- return getColorStop( 1000 * (speed / (factor * (1000 * m))));
-}
-
-/*
- * Tweaked this to scale from roughly 20C to 35C. Hence the -20 and /15
- * thing (e.g., "0" is 20 and "15" is 35 by the time we pass it to
- * rgb_from_max());
- */
-function temp_color(t)
-{
- if (t == undefined) {
- console.log("Temp_color, but temp is undefined");
- return blue;
- }
- t = parseInt(t) - 12;
- t = Math.floor((t / 23) * 1000);
- return getColorStop(t);
-}
-
-function tempUpdater()
-{
- if(!nmsData.switches)
- return;
-
- for ( var sw in nmsData.switches["switches"]) {
- var t = "white";
- var temp = "";
-
- if(!nmsData.switchstate || !nmsData.switchstate.switches || !nmsData.switchstate.switches[sw] || !nmsData.switchstate.switches[sw].temp)
- continue;
-
- var t = nmsData.switchstate.switches[sw].temp;
- temp = t + "°C";
- t = temp_color(temp);
- nmsMap.setSwitchColor(sw, t);
- nmsMap.setSwitchInfo(sw, temp);
-
- }
-}
-
-function tempInit()
-{
- //Padded the gradient with extra colors for the upper unused values
- drawGradient(["black",blue,lightblue,lightgreen,green,orange,red]);
- setLegend(1,temp_color(15),"15 °C");
- setLegend(2,temp_color(20),"20 °C");
- setLegend(3,temp_color(25),"25 °C");
- setLegend(4,temp_color(30),"30 °C");
- setLegend(5,temp_color(35),"35 °C");
- nmsData.addHandler("switchstate","mapHandler",tempUpdater);
-}
-
-function pingUpdater()
-{
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- for (var sw in nmsData.switches.switches) {
- try {
- var c;
- if (nmsData.ping.switches[sw].age > 0) {
- c = red;
- } else {
- c = gradient_from_latency(nmsData.ping.switches[sw].latency);
- }
- nmsMap.setSwitchColor(sw, c);
- } catch (e) {
- nmsMap.setSwitchColor(sw, blue);
- }
- }
-}
-
-function pingInit()
-{
- drawGradient([green,lightgreen,orange,red]);
- setLegend(1,gradient_from_latency(1),"1ms");
- setLegend(2,gradient_from_latency(30),"30ms");
- setLegend(3,gradient_from_latency(60),"60ms");
- setLegend(4,gradient_from_latency(100),"100ms");
- setLegend(5,gradient_from_latency(undefined) ,"No response");
- nmsData.addHandler("ping","mapHandler",pingUpdater);
- nmsData.addHandler("switches","mapHandler",pingUpdater);
- nmsData.addHandler("ticker", "mapHandler", pingUpdater);
-}
-
-function commentUpdater()
-{
- var realnow = Date.now();
- var now = Math.floor(realnow / 1000);
- if (nmsData.comments == undefined || nmsData.comments.comments == undefined) {
- return
- }
- if(!nmsData.switches)
- return;
- for (var sw in nmsData.switches.switches) {
- var c = "white";
- if (nmsData.comments.comments[sw] == undefined) {
- nmsMap.setSwitchColor(sw,c);
- continue;
- }
- var s = nmsData.comments.comments[sw];
- var then = 0;
- var active = 0;
- var persist = 0;
- c = "yellow";
- for (var v in s["comments"]) {
- var then_test = parseInt(s["comments"][v]["time"]);
- if (then_test > then && s["comments"][v]["state"] != "inactive")
- then = then_test;
- if (s["comments"][v]["state"] == "active") {
- active++;
- }
- if (s["comments"][v]["state"] == "persist")
- persist++;
- }
- if (then > (now - (60*15))) {
- c = red;
- } else if (active > 0) {
- c = orange;
- } else if (persist > 0) {
- c = blue;
- } else {
- c = green;
- }
- nmsMap.setSwitchColor(sw, c);
- }
-}
-
-
-function commentInit()
-{
- nmsData.addHandler("comments","mapHandler",commentUpdater);
- setLegend(1,"white","0 comments");
- setLegend(2,blue,"Persistent");
- setLegend(3,red, "New");
- setLegend(4,orange,"Active");
- setLegend(5,green ,"Old/inactive only");
-}
-
-function getDhcpColor(stop)
-{
- stop = parseInt(stop);
- stop = stop * 0.85;
- if (stop < 0)
- stop = 1000;
- if (stop > 1000)
- stop = 1000;
- return getColorStop(stop);
-}
-
-function dhcpUpdater()
-{
- if (nmsData.dhcp == undefined || nmsData.dhcp.dhcp == undefined) {
- return
- }
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- var now = nmsData.dhcp.time;
- try {
- for (var sw in nmsData.switches.switches) {
- var c = blue;
- if (nmsData.dhcp.dhcp[sw] == undefined) {
- nmsMap.setSwitchColor(sw,c);
- continue;
- }
- var s = nmsData.dhcp.dhcp[sw];
- var then = parseInt(s);
- c = getDhcpColor(now - then);
- nmsMap.setSwitchColor(sw, c);
- }
- } catch(e) {
- console.log(e);
- }
-}
-
-function dhcpInit()
-{
- drawGradient([green,lightgreen,orange,red]);
- nmsData.addHandler("dhcp","mapHandler",dhcpUpdater);
- setLegend(1,"white","Undefined");
- setLegend(2,getDhcpColor(1),"1 Second old");
- setLegend(3,getDhcpColor(300),"300 Seconds old");
- setLegend(4,getDhcpColor(900),"900 Seconds old");
- setLegend(5,getDhcpColor(1200),"1200 Seconds old");
-}
-
-/*
- * Testing-function to randomize colors of linknets and switches
- */
-function randomizeColors()
-{
-/* for (var i in nms.switches_now.linknets) {
- setLinknetColors(i, getRandomColor(), getRandomColor());
- }
-*/
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
- return;
- }
- for (var sw in nmsData.switches.switches) {
- nmsMap.setSwitchColor(sw, getRandomColor());
- }
-}
-
-function discoDo() {
- randomizeColors();
- setTimeout(randomizeColors,500);
-}
-function discoInit()
-{
- nmsData.addHandler("ticker", "mapHandler", discoDo);
-
- setNightMode(true);
- setLegend(1,blue,"Y");
- setLegend(2,red, "M");
- setLegend(3,orange,"C");
- setLegend(4,green, "A");
- setLegend(5,"white","!");
-}
-
-function snmpUpdater() {
- for (var sw in nmsData.switches.switches) {
- if (nmsData.snmp.snmp[sw] == undefined || nmsData.snmp.snmp[sw].misc == undefined) {
- nmsMap.setSwitchColor(sw, red);
- } else if (nmsData.snmp.snmp[sw].misc.sysName[0] != sw) {
- nmsMap.setSwitchColor(sw, orange);
- } else {
- nmsMap.setSwitchColor(sw, green);
- }
- }
-}
-function snmpInit() {
- nmsData.addHandler("snmp", "mapHandler", snmpUpdater);
-
- setLegend(1,green,"OK");
- setLegend(2,orange, "Sysname mismatch");
- setLegend(3,red,"No SNMP data");
- setLegend(4,green, "");
- setLegend(5,green,"");
-
-}
-function cpuUpdater() {
- for (var sw in nmsData.switches.switches) {
- try {
- var cpu = 0;
- for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingCPU) {
- var local = nmsData.snmp.snmp[sw].misc['jnxOperatingCPU'][u];
- cpu = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingCPU[u],cpu);
- }
- nmsMap.setSwitchColor(sw, getColorStop(cpu * 10));
- nmsMap.setSwitchInfo(sw, cpu + " % ");
- } catch (e) {
- nmsMap.setSwitchColor(sw, "white");
- nmsMap.setSwitchInfo(sw, "N/A");
- }
- }
-}
-
-function cpuInit() {
- nmsData.addHandler("snmp", "mapHandler", cpuUpdater);
- drawGradient([green,orange,red]);
- setLegend(1,getColorStop(0),"0 %");
- setLegend(2,getColorStop(250),"25 %");
- setLegend(3,getColorStop(600),"60 %");
- setLegend(4,getColorStop(1000),"100 %");
- setLegend(5,"white","N/A");
-}
diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js
deleted file mode 100644
index 224b3db..0000000
--- a/web/nms.gathering.org/js/nms-map.js
+++ /dev/null
@@ -1,590 +0,0 @@
-"use strict";
-
-/* WORK
- * IN
- * PROGRESS
- *
- * Interface:
- *
- * nmsMap.init() - start things up
- * nmsMap.setSwitchColor(switch,color)
- * nmsMap.setSwitchInfo(switch,info)
- * nmsMap.setSwitchHighlight(switch,true/false)
- * nmsMap.enableHighlights()
- * nmsMap.disableHighlights()
- */
-
-
-var nmsMap = nmsMap || {
- _moveInProgress: false,
- stats: {
- colorChange:0,
- colorSame:0,
- earlyDrawAll:0,
- nowDups:0,
- nows:0,
- resizeEvents:0,
- switchInfoSame:0,
- switchInfoUpdate:0,
- highlightChange:0
- },
- contexts: ["bg","link","blur","switch","text","textInfo","top","input","hidden"],
- _info: {},
- _settings: {
- fontLineFactor: 2,
- textMargin: 3,
- xMargin: 10,
- yMargin: 20,
- fontSize: 15,
- fontFace: "sans-serif"
- },
- scale: 1,
- _init: true,
- _orig: { width:1920, height:1032 },
- _canvas: {
- get width() { return nmsMap.scale * nmsMap._orig.width; },
- get height() { return nmsMap.scale * nmsMap._orig.height; }
- },
-
- _color: { },
- _linknets: {} ,
- _highlight: { },
- _highlightActive: false,
- _c: {}
-};
-
-nmsMap._loadEvent = function(e) {
- nmsMap._init = false;
- nmsMap._drawAllSwitches();
-};
-
-nmsMap.init = function() {
- this._initContexts();
- this._init = true;
- nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();});
- window.addEventListener('resize',nmsMap._resizeEvent,true);
- window.addEventListener('load',nmsMap._loadEvent,true);
-};
-
-nmsMap.setSwitchColor = function(sw, color) {
- if (this._color[sw] != color) {
- this._color[sw] = color;
- this._drawSwitch(sw);
- this.stats.colorChange++;
- } else {
- this.stats.colorSame++;
- }
-};
-
-
-nmsMap.setSwitchHighlight = function(sw, highlight) {
- if( highlight )
- highlight = true;
- if ( this._highlight[sw] != highlight ) {
- this.stats.highlightChange++;
- this._highlight[sw] = highlight;
- }
- this._drawSwitch(sw);
-};
-
-
-nmsMap.enableHighlights = function() {
- this._highlightActive = true;
-};
-
-
-nmsMap.disableHighlights = function() {
- this._highlightActive = false;
- this._drawAllSwitches();
-};
-
-
-nmsMap.reset = function() {
- for (var sw in this._color) {
- nmsMap.setSwitchColor(sw, undefined);
- }
- for (var sw in this._info) {
- nmsMap.setSwitchInfo(sw, undefined);
- }
-};
-
-nmsMap.setSwitchInfo = function(sw,info) {
- if (this._info[sw] != info) {
- this._info[sw] = info;
- this._drawSwitchInfo(sw);
- this.stats.switchInfoUpdate++;
- } else {
- this.stats.switchInfoSame++;
- }
-};
-
-nmsMap._initContext = function(name) {
- this._c[name] = {};
- this._c[name].c = document.getElementById(name + "Canvas");
- this._c[name].ctx = this._c[name].c.getContext('2d');
-};
-
-nmsMap._initContexts = function() {
- for (var context in this.contexts) {
- this._initContext(this.contexts[context]);
- }
-};
-
-nmsMap._resizeEvent = function() {
- var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft;
- var height = window.innerHeight - nmsMap._c.bg.c.offsetTop;
-
- var xScale = (width / (nmsMap._orig.width + nmsMap._settings.xMargin));
- var yScale = (height / (nmsMap._orig.height + nmsMap._settings.yMargin));
-
- if (xScale > yScale) {
- nmsMap.scale = yScale;
- } else {
- nmsMap.scale = xScale;
- }
- for (var a in nmsMap._c) {
- /*
- * Resizing this to a too small size breaks gradients on smaller screens.
- */
- if (a == 'hidden' && a != 'blur')
- continue;
- nmsMap._c[a].c.height = nmsMap._canvas.height;
- nmsMap._c[a].c.width = nmsMap._canvas.width;
- if(a == 'bg') {
- nmsMap._drawBG();
- }
- }
- if (nmsMap._init != true) {
- nmsMap._blurDrawn = false;
- nmsMap._drawBG();
- nmsMap._drawAllSwitches();
- nmsMap._drawAllLinknets();
- nmsMap.drawNow();
- nmsMap.stats.resizeEvents++;
- }
-};
-
-/*
- * Draw current time-window
- *
- * FIXME: The math here is just wild approximation and guesswork because
- * I'm lazy.
- *
- * FIXME: 2: Should really just use _drawText() instead somehow. Font size
- * being an issue.
- *
- * FIXME 3: Currently assuming that time from api is UTC and converting to
- * local time zone with js. Should find a more robust solution.
- *
- */
-nmsMap.drawNow = function ()
-{
- var now = nmsData.now;
- if(String(now).indexOf('T') == -1) { //If now does not contain 'T' we assume its in epoch format
- now = new Date(nmsData.now * 1000);
- } else {
- now = new Date(nmsData.now); //Date assumes UTC
- }
- now = now.toString().split(' ').splice(1,4).join(' '); //Date returns local time
- if (nmsMap._lastNow == now) {
- nmsMap.stats.nowDups++;
- return;
- }
- nmsMap.stats.nows++;
-
- var ctx = nmsMap._c.top.ctx;
- ctx.save();
- ctx.scale(this.scale, this.scale);
- ctx.font = (2 * this._settings.fontSize) + "px " + this._settings.fontFace;
- ctx.clearRect(0,0,800,100);
- ctx.fillStyle = "white";
- ctx.strokeStyle = "black";
- ctx.lineWidth = nms.fontLineFactor;
- ctx.strokeText(now, this._settings.textMargin, 25);
- ctx.fillText(now, this._settings.textMargin, 25);
- ctx.restore();
-};
-
-nmsMap.setNightMode = function(toggle) {
- if (this._nightmode == toggle)
- return;
- this._nightmode = toggle;
- if (this._init == true) {
- return;
- }
- if (!toggle)
- this._c.blur.c.style.display = "none";
- else {
- this._drawAllBlur();
- this._c.blur.c.style.display = "";
- }
- nmsMap._drawBG();
-};
-
-nmsMap._drawBG = function() {
- var imageObj = document.getElementById('source');
- this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
- if(this._nightmode)
- nmsMap._invertBG();
-};
-
-nmsMap._invertBG = function() {
- var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
- var data = imageData.data;
-
- for(var i = 0; i < data.length; i += 4) {
- data[i] = 255 - data[i];
- data[i + 1] = 255 - data[i + 1];
- data[i + 2] = 255 - data[i + 2];
- }
- this._c.bg.ctx.putImageData(imageData, 0, 0);
-};
-
-nmsMap._getBox = function(sw) {
- var box = nmsData.switches.switches[sw]['placement'];
- box.x = parseInt(box.x);
- box.y = parseInt(box.y);
- box.width = parseInt(box.width);
- box.height = parseInt(box.height);
- return box;
-};
-
-nmsMap._drawSwitchBlur = function(sw)
-{
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
- return;
- var box = this._getBox(sw);
- this._c.blur.ctx.save();
- this._c.blur.ctx.fillStyle = "red";
- this._c.blur.ctx.shadowBlur = 30;
- this._c.blur.ctx.shadowColor = "white";
- this._c.blur.ctx.scale(this.scale, this.scale); // FIXME <- fix what?!
- this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']);
- this._c.blur.ctx.restore();
-};
-
-nmsMap._drawSwitch = function(sw)
-{
- // XXX: If a handler sets a color before switches are loaded... The
- // color will get set fine so this isn't a problem.
- if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
- return;
- var box = this._getBox(sw);
- var color = nmsMap._color[sw];
- if(this._highlightActive) {
- if(nmsMap._highlight[sw]) {
- color = green;
- } else {
- color = white;
- }
- }
- if (color == undefined) {
- color = blue;
- }
- this._c.switch.ctx.fillStyle = color;
- this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']);
- this._c.switch.ctx.shadowBlur = 0;
- this._drawText(this._c.text.ctx, sw,box);
-
- if(this._info[sw])
- this._drawSwitchInfo(sw);
-};
-
-nmsMap._drawSwitchInfo = function(sw) {
- var box = this._getBox(sw);
- if (this._info[sw] == undefined) {
- this._clearBox(this._c.textInfo.ctx, box);
- } else {
- this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right");
- }
-};
-
-nmsMap._clearBox = function(ctx,box) {
- ctx.save();
- ctx.scale(this.scale,this.scale);
- ctx.clearRect(box['x'], box['y'], box['width'], box['height']);
- ctx.restore();
-};
-
-nmsMap._drawText = function(ctx, text, box, align) {
- var rotate = false;
-
- if ((box['width'] + 10 )< box['height'])
- rotate = true;
-
- this._clearBox(ctx,box);
- ctx.save();
- ctx.scale(this.scale, this.scale);
- ctx.font = "bold " + this._settings.fontSize + "px " + this._settings.fontFace;
- ctx.lineWidth = nmsMap._settings.fontLineFactor;
- ctx.fillStyle = "white";
- ctx.strokeStyle = "black";
- ctx.translate(box.x + this._settings.textMargin, box.y + box.height - this._settings.textMargin);
-
- if (rotate) {
- ctx.translate(box.width - this._settings.textMargin * 2,0);
- ctx.rotate(Math.PI * 3/2);
- }
-
- if (align == "right") {
- ctx.textAlign = "right";
- /*
- * Margin*2 is to compensate for the margin above.
- */
- if (rotate)
- ctx.translate(box.height - this._settings.textMargin*2,0);
- else
- ctx.translate(box.width - this._settings.textMargin*2,0);
- }
-
- ctx.strokeText(text, 0, 0);
- ctx.fillText(text, 0, 0);
- ctx.restore();
-};
-
-nmsMap._setLinknetColor = function(l, color1, color2)
-{
- var oldcolor1;
- var oldcolor2;
- try {
- oldcolor1 = nmsMap._linknets[l].sysname1;
- oldcolor2 = nmsMap._linknets[l].sysname2;
- if (oldcolor1 == color1 && oldcolor2 == color2) {
- return ;
- }
- } catch (e) {}
- nmsMap._linknets[l] = {};
- nmsMap._linknets[l].sysname1 = color1;
- nmsMap._linknets[l].sysname2 = color2;
- nmsMap._drawLinknet(l)
-}
-
-nmsMap._drawLinknet = function(l) {
- try {
- var color1 = blue;
- var color2 = blue;
- try {
- color1 = nmsMap._linknets[l].sysname1;
- color2 = nmsMap._linknets[l].sysname2;
- } catch(e) { }
- nmsMap._connectSwitches(nmsData.switches.linknets[l].sysname1, nmsData.switches.linknets[l].sysname2, color1, color2);
- } catch(e) { }
-}
-
-nmsMap._drawAllLinknets = function() {
- for (var l in nmsData.switches.linknets) {
- nmsMap._drawLinknet(l);
- }
-}
-nmsMap._drawAllSwitches = function() {
- if (nmsData.switches == undefined) {
- this.stats.earlyDrawAll++;
- return;
- }
- for (var sw in nmsData.switches.switches) {
- this._drawSwitch(sw);
- }
- if (this._nightmode)
- this._drawAllBlur();
-};
-
-nmsMap._drawAllBlur = function() {
- if (nmsMap._blurDrawn == true)
- return;
- nmsMap._blurDrawn = true;
- for (var sw in nmsData.switches.switches) {
- nmsMap._drawSwitchBlur(sw);
- }
-};
-
-nmsMap._drawBox = function(ctx, x, y, boxw, boxh) {
- ctx.save();
- ctx.scale(this.scale, this.scale); // FIXME <- what?!
- ctx.fillRect(x,y, boxw, boxh);
- ctx.lineWidth = 1;
- ctx.strokeStyle = "#000000";
- ctx.strokeRect(x,y, boxw, boxh);
- ctx.restore();
-};
-
-nmsMap._connectSwitches = function(sw1, sw2, color1, color2) {
- nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2),
- color1, color2);
-};
-
-/*
- * Draw a line between two boxes, with a gradient going from color1 to
- * color2.
- */
-nmsMap._connectBoxes = function(box1, box2,color1, color2) {
- var ctx = nmsMap._c.link.ctx;
- if (color1 == undefined)
- color1 = blue;
- if (color2 == undefined)
- color2 = blue;
- var x0 = Math.floor(box1.x + box1.width/2);
- var y0 = Math.floor(box1.y + box1.height/2);
- var x1 = Math.floor(box2.x + box2.width/2);
- var y1 = Math.floor(box2.y + box2.height/2);
- ctx.save();
- ctx.scale(nmsMap.scale, nmsMap.scale);
- var gradient = ctx.createLinearGradient(x1,y1,x0,y0);
- gradient.addColorStop(0, color1);
- gradient.addColorStop(1, color2);
- ctx.strokeStyle = gradient;
- ctx.beginPath();
- ctx.moveTo(x0,y0);
- ctx.lineTo(x1,y1);
- ctx.lineWidth = 5;
- ctx.stroke();
- ctx.closePath();
- ctx.restore();
-};
-
-nmsMap.moveSet = function(toggle) {
- nmsMap._moveInProgress = toggle;
- if (!toggle)
- nmsMap._moveStopListen();
-};
-
-/*
- * onclick handler for the canvas.
- *
- * Currently just shows info for a switch.
- */
-nmsMap.canvasClick = function(e)
-{
- var sw = findSwitch(e.pageX - e.target.offsetLeft, e.pageY - e.target.offsetTop);
- if (sw != undefined) {
- if (nmsMap._moveInProgress) {
- nmsMap._moveStart(sw, e);
- } else {
- nmsInfoBox.click(sw);
- }
- } else {
- nmsInfoBox.hide();
- }
-};
-
-nmsMap._clearOld = function(box) {
- if (box) {
- nmsMap._c.top.ctx.save();
- nmsMap._c.top.ctx.fillStyle = "#000000";
- nmsMap._c.top.ctx.scale(nmsMap.scale, nmsMap.scale); // FIXME
- nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10);
- nmsMap._c.top.ctx.restore();
- }
-};
-
-nmsMap._moveMove = function(e) {
- nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
- nmsMap._moveY = (e.pageY - e.target.offsetTop) / nmsMap.scale;
- var diffx = nmsMap._moveX - nmsMap._moveXstart;
- var diffy = nmsMap._moveY - nmsMap._moveYstart;
- var box = {};
- nmsMap._clearOld(nmsMap._moveOldBox);
- box['x'] = nmsMap._moveBox['x'] + diffx;
- box['y'] = nmsMap._moveBox['y'] + diffy;
- box['height'] = nmsMap._moveBox['height'];
- box['width'] = nmsMap._moveBox['width'];
- nmsMap._moveOldBox = box;
- nmsMap._c.top.ctx.save();
- nmsMap._c.top.ctx.fillStyle = "red";
- nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']);
- nmsMap._c.top.ctx.restore();
-};
-
-nmsMap._moveSubmit = function() {
- var data = {
- sysname: nmsMap._moving,
- placement: nmsMap._moveOldBox
- };
- var myData = JSON.stringify([data]);
- $.ajax({
- type: "POST",
- url: "/api/write/switch-update",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("switches");
- }
- });
-};
-
-nmsMap._moveStopListen = function() {
- nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true);
- nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true);
-};
-
-nmsMap._moveDone = function(e) {
- nmsMap._moveStopListen();
- if(nmsMap._moveOldBox == false) {
- return;
- }
- nmsMap._moveSubmit();
- nmsMap._clearOld(nmsMap._moveOldBox);
-};
-
-nmsMap._moveStart = function(sw, e)
-{
- nmsMap._moving = sw;
- nmsMap._moveOldBox = false;
- nmsMap._moveXstart = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
- nmsMap._moveYstart = (e.pageY - e.target.offsetTop) / nmsMap.scale;
- nmsMap._moveBox = nmsData.switches.switches[sw].placement;
- nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true);
- nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true);
-};
-
-
-/*
- * STUFF NOT YET INTEGRATED, BUT MOVED AWAY FROM nms.js TO TIDY.
- *
- * Consider this a TODO list.
- */
-
-/*
- * Draw a linknet with index i.
- *
- * XXX: Might have to change the index here to match backend
- */
-function drawLinknet(i)
-{
- var c1 = nms.linknet_color[i] && nms.linknet_color[i].c1 ? nms.linknet_color[i].c1 : blue;
- var c2 = nms.linknet_color[i] && nms.linknet_color[i].c2 ? nms.linknet_color[i].c2 : blue;
- if (nmsData.switches.switches[nmsData.switches.linknets[i].sysname1] && nmsData.switches.switches[nmsData.switches.linknets[i].sysname2]) {
- connectSwitches(nmsData.switches.linknets[i].sysname1,nmsData.switches.linknets[i].sysname2, c1, c2);
- }
-}
-
-/*
- * Draw all linknets
- */
-function drawLinknets()
-{
- if (nmsData.switches && nmsData.switches.linknets) {
- for (var i in nmsData.switches.linknets) {
- drawLinknet(i);
- }
- }
-}
-
-/*
- * Change both colors of a linknet.
- *
- * XXX: Probably have to change this to better match the backend data
- */
-function setLinknetColors(i,c1,c2)
-{
- if (!nms.linknet_color[i] ||
- nms.linknet_color[i].c1 != c1 ||
- nms.linknet_color[i].c2 != c2) {
- if (!nms.linknet_color[i])
- nms.linknet_color[i] = {};
- nms.linknet_color[i]['c1'] = c1;
- nms.linknet_color[i]['c2'] = c2;
- drawLinknet(i);
- }
-}
-
-
diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js
deleted file mode 100644
index 0c4790c..0000000
--- a/web/nms.gathering.org/js/nms.js
+++ /dev/null
@@ -1,792 +0,0 @@
-"use strict";
-var nms = {
- stats:{}, // Various internal stats
- get nightMode() { return this._nightMode; },
- set nightMode(val) { if (val != this._nightMode) { this._nightMode = val; setNightMode(val); } },
- /*
- * FIXME: This should be slightly smarter.
- */
- _now: false,
- get now() { return this._now },
- set now(v) { this._now = v; nmsData.now = v; },
- /*
- * Various setInterval() handlers. See nmsTimer() for how they are
- * used.
- *
- * FIXME: Should just stop using these.
- */
- timers: {
- playback:false,
- tvmode: false
- },
-
- menuShowing:true,
- /*
- * This is a list of nms[x] variables that we store in our
- * settings-cookie when altered and restore on load.
- */
- settingsList:[
- 'nightMode',
- 'menuShowing'
- ],
- keyBindings:{
- '-':toggleMenu,
- 'n':toggleNightMode,
- '1':setMapModeFromN,
- '2':setMapModeFromN,
- '3':setMapModeFromN,
- '4':setMapModeFromN,
- '5':setMapModeFromN,
- '6':setMapModeFromN,
- '7':setMapModeFromN,
- '8':setMapModeFromN,
- '9':setMapModeFromN,
- 'c':toggleConnect,
- 'h':moveTimeFromKey,
- 'j':moveTimeFromKey,
- 'k':moveTimeFromKey,
- 'l':moveTimeFromKey,
- 'p':moveTimeFromKey,
- 'r':moveTimeFromKey,
- 'Escape':hideWindow,
- '?':toggleHelp
- },
- /*
- * Playback controllers and variables
- */
- playback:{
- startTime: false,
- stopTime: false,
- playing: false,
- replayTime: 0,
- replayIncrement: 60 * 60
- },
- tvmode: {
- handlers: [],
- currentIndex: 0,
- interval: 20000,
- hideMenu: false,
- active: false,
- nightMode: false,
- vertical: false
- }
-};
-
-/*
- * Returns a handler object.
- *
- * This might seem a bit much for 'setInterval()' etc, but it's really more
- * about self-documentation and predictable ways of configuring timers.
- */
-function nmsTimer(handler, interval, name, description) {
- this.handler = handler;
- this.handle = false;
- this.interval = parseInt(interval);
- this.name = name;
- this.description = description;
- this.start = function() {
- if (this.handle) {
- this.stop();
- }
- this.handle = setInterval(this.handler,this.interval);
- };
- this.stop = function() {
- if (this.handle)
- clearInterval(this.handle);
- this.handle = false;
- };
-
- this.setInterval = function(interval) {
- var started = this.handle != false;
- this.stop();
- this.interval = parseInt(interval);
- if (started)
- this.start();
- };
-}
-
-
-/*
- * Convenience function that doesn't support huge numbers, and it's easier
- * to comment than to fix. But not really, but I'm not fixing it anyway.
- */
-function byteCount(bytes,precision) {
- if (precision ==undefined)
- precision = 1;
- var units = ['', 'K', 'M', 'G', 'T', 'P'];
- var i = 0;
- while (bytes > 1024) {
- bytes = bytes / 1024;
- i++;
- }
- return bytes.toFixed(precision) + units[i];
-}
-
-/*
- * Definitely not a way to toggle night mode. Does something COMPLETELY
- * DIFFERENT.
- */
-function toggleNightMode()
-{
- nms.nightMode = !nms.nightMode;
- saveSettings();
-}
-
-/*
- * Parse 'now' from user-input.
- *
- * Should probably just use stringToEpoch() instead, but alas, not yet.
- */
-function parseNow(now)
-{
- if (Date.parse(now)) {
- // Adjust for timezone when converting from epoch (UTC) to string (local)
- var d = new Date(now);
- var timezoneOffset = d.getTimezoneOffset() * -60000;
- var d = new Date(Date.parse(now) - timezoneOffset);
- var str = d.getFullYear() + "-" + ("00" + (parseInt(d.getMonth())+1)).slice(-2) + "-" + ("00" + d.getDate()).slice(-2) + "T";
- str += ("00" + d.getHours()).slice(-2) + ":" + ("00" + d.getMinutes()).slice(-2) + ":" + ("00" + d.getSeconds()).slice(-2);
- return str;
-
- }
- if (now == "")
- return "";
- return false;
-}
-
-/*
- * Convert back and forth between epoch.
- *
- * There's no particular reason why I use seconds instead of javascript
- * microseconds, except to leave the mark of a C coder on this javascript
- * project.
- */
-function stringToEpoch(t)
-{
- var foo = t.toString();
-// foo = foo.replace('T',' ');
- var ret = new Date(Date.parse(foo));
- return parseInt(parseInt(ret.valueOf()) / 1000);
-}
-
-/*
- * Have to pad with zeroes to avoid "17:5:0" instead of the conventional
- * and more readable "17:05:00". I'm sure there's a better way, but this
- * works just fine.
- */
-function epochToString(t)
-{
- // Adjust for timezone when converting from epoch (UTC) to string (local)
- var date = new Date(parseInt(t) * parseInt(1000));
- var timezoneOffset = date.getTimezoneOffset() * -60;
- t = t - timezoneOffset;
-
- date = new Date(parseInt(t) * parseInt(1000));
- var str = date.getFullYear() + "-";
- if (parseInt(date.getMonth()) < 9)
- str += "0";
- str += (parseInt(date.getMonth())+1) + "-";
- if (date.getDate() < 10)
- str += "0";
- str += date.getDate() + "T";
- if (date.getHours() < 10)
- str += "0";
- str += date.getHours() + ":";
- if (date.getMinutes() < 10)
- str += "0";
- str += date.getMinutes() + ":";
- if (date.getSeconds() < 10)
- str += "0";
- str += date.getSeconds();
-
- return str;
-}
-
-function localEpochToString(t) {
- var d = new Date(parseInt(t) * parseInt(1000));
- var timezoneOffset = d.getTimezoneOffset() * -60;
- t = t + timezoneOffset;
-
- return epochToString(t);
-}
-
-/*
- * Start replaying historical data.
- */
-nms.playback.startReplay = function(startTime,stopTime) {
- if(!startTime || !stopTime)
- return false;
-
- nms.playback.pause();
- nms.playback.startTime = stringToEpoch(startTime);
- nms.playback.stopTime = stringToEpoch(stopTime);
- nms.now = epochToString(nms.playback.startTime);
- nms.playback.play();
-};
-
-/*
- * Pause playback
- */
-nms.playback.pause = function() {
- nms.timers.playback.stop();
- nms.playback.playing = false;
-};
-
-/*
- * Start playback
- */
-nms.playback.play = function() {
- nms.playback.tick();
- nms.timers.playback.start();
- nms.playback.playing = true;
-};
-
-/*
- * Toggle playback
- */
-nms.playback.toggle = function() {
- if(nms.playback.playing) {
- nms.playback.pause();
- } else {
- nms.playback.play();
- }
-};
-
-/*
- * Jump to place in time
- */
-nms.playback.setNow = function(now) {
- nms.now = parseNow(now);
-
- nms.playback.stopTime = false;
- nms.playback.startTime = false;
- nms.playback.tick();
-};
-
-/*
- * Step forwards or backwards in timer
- */
-nms.playback.stepTime = function(n)
-{
- var now = getNowEpoch();
- var newtime = parseInt(now) + parseInt(n);
- nms.now = epochToString(parseInt(newtime));
-
- if(!nms.playback.playing)
- nms.playback.tick();
-};
-
-/*
- * Ticker to trigger updates, and advance time if replaying
- *
- * This is run on a timer (nms.timers.tick) every second while unpaused
- */
-nms.playback.tick = function()
-{
- nms.playback.replayTime = getNowEpoch();
-
- // If outside start-/stopTime, remove limits and pause playback
- if (nms.playback.stopTime && (nms.playback.replayTime >= nms.playback.stopTime || nms.playback.replayTime < nms.playback.startTime)) {
- nms.playback.stopTime = false;
- nms.playback.startTime = false;
- nms.playback.pause();
- return;
- }
-
- // If past actual datetime, go live
- if (nms.playback.replayTime > parseInt(Date.now() / 1000)) {
- nms.now = false;
- }
-
- // If we are still replaying, advance time
- if(nms.now !== false && nms.playback.playing) {
- nms.playback.stepTime(nms.playback.replayIncrement);
- }
-};
-
-/*
- * Helper function for safely getting a valid now-epoch
- */
-function getNowEpoch() {
- if (nms.now && nms.now != 0)
- return stringToEpoch(nms.now);
- else
- return parseInt(Date.now() / 1000);
-}
-
-/*
- * There are 4 legend-bars. This is a helper-function to set the color and
- * description/name for each one. Used from handler init-functions.
- *
- * FIXME: Should be smarter, possibly use a canvas-writer so we can get
- * proper text (e.g.: not black text on dark blue).
- */
-function setLegend(x,color,name)
-{
- if(nms.tvmode.active) {
- var el = document.getElementById("tv-mode-legend-" + x);
- } else {
- var el = document.getElementById("legend-" + x);
- }
- el.style.background = color;
- el.title = name;
- el.textContent = name;
-}
-
-/*
- * Start TV-mode
- *
- * Loops trough a list of views/updaters at a set interval.
- * Arguments: array of views, interval in seconds, use nightmode, hide menus
- */
-nms.tvmode.start = function(views,interval,nightMode,hideMenus,displayVertical) {
- nms.tvmode.handlers = [];
- for(var view in views) {
- for(var handler in handlers) {
- if(views[view] == handlers[handler].tag) {
- nms.tvmode.handlers.push(handlers[handler]);
- }
- }
- }
- if (nms.tvmode.handlers.length > 1) {
- if(interval > 0)
- nms.tvmode.interval = interval * 1000;
- setNightMode(nightMode);
- if(nms.menuShowing && hideMenus)
- toggleMenu();
- if(displayVertical)
- nms.tvmode.vertical = true;
- nms.timers.tvmode = new nmsTimer(nms.tvmode.tick, nms.tvmode.interval, "TV-mode ticker", "Handler used to advance tv-mode");
- nms.timers.tvmode.start();
- nms.tvmode.tick();
- nms.tvmode.active = true;
-
- document.body.classList.add("tvmode");
- if(nms.tvmode.vertical)
- document.body.classList.add("vertical");
- }
-}
-nms.tvmode.tick = function() {
- if(nms.tvmode.currentIndex > nms.tvmode.handlers.length - 1) {
- nms.tvmode.currentIndex = 0;
- }
- setUpdater(nms.tvmode.handlers[nms.tvmode.currentIndex]);
- nms.tvmode.currentIndex++;
-}
-nms.tvmode.stop = function() {
- nms.timers.tvmode.stop();
- document.body.classList.remove("tvmode");
- document.body.classList.remove("vertical");
- nms.tvmode.active = false;
-}
-
-/*
- * Change map handler (e.g., change from uplink map to ping map)
- */
-function setUpdater(fo)
-{
- nmsMap.reset();
- nmsData.unregisterHandlerWildcard("mapHandler");
- try {
- fo.init();
- } catch (e) {
- /*
- * This can happen typically on initial load where the data
- * hasn't been retrieved yet. Instead of breaking the
- * entire init-process, just bail out here.
- */
- console.log("Possibly broken handler: " + fo.name);
- console.log(e);
- }
- var foo = document.getElementById("updater_name");
- foo.innerHTML = fo.name + " ";
- var foo = document.getElementById("map-mode-title");
- foo.innerHTML = fo.name;
- document.location.hash = fo.tag;
-}
-
-function toggleLayer(layer) {
- var l = document.getElementById(layer);
- if (l.style.display == 'none')
- l.style.display = '';
- else
- l.style.display = 'none';
-}
-
-function toggleConnect() {
- toggleLayer("linkCanvas");
-}
-
-function commentInactive(id)
-{
- commentChange(id,"inactive");
-}
-
-function commentPersist(id)
-{
- commentChange(id,"persist");
-}
-
-function commentDelete(id)
-{
- var r = confirm("Really delete comment? (Delted comments are still stored in the database, but never displayed)");
- if (r == true) {
- commentChange(id,"delete");
- }
-}
-
-/*
- * FIXME: Neither of these two handle failures in any way, shape or form.
- * Nor do they really give user-feedback. They work, but only by magic.
- */
-function commentChange(id,state)
-{
- var myData = {
- comment:id,
- state:state
- };
- myData = JSON.stringify(myData);
- $.ajax({
- type: "POST",
- url: "/api/write/comment-change",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("comments");
- }
- });
-}
-
-function addComment(sw,comment)
-{
- var myData = {
- switch:sw,
- comment:comment
- };
- myData = JSON.stringify(myData);
- $.ajax({
- type: "POST",
- url: "/api/write/comment-add",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("comments");
- }
- });
-}
-
-
-
-/*
- * Returns true if the coordinates (x,y) is inside the box defined by
- * box.{x,y,w.h} (e.g.: placement of a switch).
- */
-function isIn(box, x, y)
-{
- return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height)));
-}
-
-/*
- * Return the name of the switch found at coordinates (x,y), or 'undefined'
- * if none is found.
- */
-function findSwitch(x,y) {
- x = parseInt(parseInt(x) / nmsMap.scale);
- y = parseInt(parseInt(y) / nmsMap.scale);
-
- for (var v in nmsData.switches.switches) {
- if(isIn(nmsData.switches.switches[v]['placement'],x,y)) {
- return v;
- }
- }
- return undefined;
-}
-
-/*
- * Set night mode to whatever 'toggle' is.
- *
- * Changes background and nav-bar, then leaves the rest to nmsMap.
- */
-function setNightMode(toggle) {
- nms.nightMode = toggle;
- var body = document.getElementById("body");
- body.style.background = toggle ? "black" : "white";
- var nav = document.getElementsByTagName("nav")[0];
- if (toggle) {
- nav.classList.add('navbar-inverse');
- document.body.classList.add("nightmode");
- } else {
- nav.classList.remove('navbar-inverse');
- document.body.classList.remove("nightmode");
- }
- nmsMap.setNightMode(toggle);
-}
-
-/*
- * Boot up "fully fledged" NMS.
- *
- * This can be re-written to provide different looks and feels but using
- * the same framework. Or rather: that's the goal. We're not quite there
- * yet.
- */
-function initNMS() {
- nms.timers.playback = new nmsTimer(nms.playback.tick, 1000, "Playback ticker", "Handler used to advance time");
-
- // Public
- nmsData.registerSource("ping", "/api/public/ping");
- nmsData.registerSource("switches","/api/public/switches");
- nmsData.registerSource("switchstate","/api/public/switch-state");
- nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary");
- nmsData.registerSource("dhcp","/api/public/dhcp");
-
- // This is a magic dummy-source, it's purpose is to give a unified
- // way to get ticks every second. It is mainly meant to allow map
- // handlers to register for ticks so they will execute without data
- // (and thus notice stale data instead of showing a green ping-map
- // despite no pings)
- nmsData.registerSource("ticker","bananabananbanana");
-
- // Private
- nmsData.registerSource("snmp","/api/read/snmp");
- nmsData.registerSource("comments", "/api/read/comments");
- nmsData.registerSource("smanagement","/api/read/switches-management");
-
- restoreSettings();
- nmsMap.init();
- detectHandler();
- nms.playback.play();
- setupKeyhandler();
- setupSearchKeyHandler();
-}
-
-function detectHandler() {
- for (var i in handlers) {
- if (('#' + handlers[i].tag) == document.location.hash) {
- setUpdater(handlers[i]);
- return;
- }
- }
- if(document.location.hash == "#tvmode") {
- var views = getUrlVars()["views"];
- var nightMode = parseInt(getUrlVars()["nightmode"]);
- var vertical = parseInt(getUrlVars()["vertical"]);
- var interval = parseInt(getUrlVars()["interval"]);
-
- views = views.split(",");
- if(nightMode == "0") {
- nightMode = false;
- } else {
- nightMode = true;
- }
- if(vertical == 1) {
- vertical = true;
- } else {
- vertical = false;
- }
-
- nms.tvmode.start(views,interval,nightMode,true,vertical);
- return;
- } else {
- setUpdater(handler_ping);
- }
-}
-
-function getUrlVars() {
- var vars = {};
- var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
- vars[key] = value;
- });
- return vars;
-}
-
-function setMenu()
-{
- var nav = document.getElementsByTagName("nav")[0];
- nav.style.display = nms.menuShowing ? '' : 'none';
-}
-
-function toggleMenu()
-{
- nms.menuShowing = ! nms.menuShowing;
- setMenu();
- saveSettings();
-}
-function hideWindow(e,key)
-{
- nmsInfoBox.hide();
-}
-function toggleHelp(e,key) {
- toggleLayer('aboutKeybindings');
-}
-
-function setMapModeFromN(e,key)
-{
- switch(key) {
- case '1':
- setUpdater(handler_ping);
- break;
- case '2':
- setUpdater(handler_uplinks);
- break;
- case '3':
- setUpdater(handler_dhcp);
- break;
- case '4':
- setUpdater(handler_comment);
- break;
- case '5':
- setUpdater(handler_temp);
- break;
- case '6':
- setUpdater(handler_traffic);
- break;
- case '7':
- setUpdater(handler_traffic_tot);
- break;
- case '8':
- setUpdater(handler_snmp);
- break;
- case '9':
- setUpdater(handler_disco);
- break;
- }
- return true;
-}
-
-function moveTimeFromKey(e,key)
-{
- switch(key) {
- case 'h':
- nms.playback.stepTime(-3600);
- break;
- case 'j':
- nms.playback.stepTime(-300);
- break;
- case 'k':
- nms.playback.stepTime(300);
- break;
- case 'l':
- nms.playback.stepTime(3600);
- break;
- case 'p':
- nms.playback.toggle();
- break;
- case 'r':
- nms.playback.setNow();
- nms.playback.play();
- break;
- }
- return true;
-}
-
-function keyPressed(e)
-{
- if (e.target.nodeName == "INPUT") {
- return false;
- }
- if(e.key) {
- var key = e.key;
- } else {
- var key = e.keyCode;
- switch(key) {
- case 187:
- key = '?';
- break;
- case 189:
- key = '-';
- break;
- case 27:
- key = 'Escape';
- break;
- default:
- key = String.fromCharCode(key);
- key = key.toLowerCase();
- break;
- }
- }
- if (nms.keyBindings[key])
- return nms.keyBindings[key](e,key);
- if (nms.keyBindings['default'])
- return nms.keyBindings['default'](e,key);
- return false;
-}
-
-function setupKeyhandler()
-{
- var b = document.getElementsByTagName("body")[0];
- $( "body" ).keyup(function(e) {
- keyPressed(e);
- });
-}
-
-function setupSearchKeyHandler()
-{
- $("#searchbox").keyup(function(e) {
- nmsInfoBox._searchKeyListener(e);
- });
-}
-
-
-function getCookie(cname) {
- var name = cname + "=";
- var ca = document.cookie.split(';');
- for(var i=0; i<ca.length; i++) {
- var c = ca[i];
- while (c.charAt(0)==' ')
- c = c.substring(1);
- if (c.indexOf(name) == 0)
- return c.substring(name.length,c.length);
- }
- return "";
-}
-
-function saveSettings()
-{
- var foo={};
- for ( var v in nms.settingsList ) {
- foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ];
- }
- document.cookie = 'nms='+btoa(JSON.stringify(foo));
-}
-
-function restoreSettings()
-{
- try {
- var retrieve = JSON.parse(atob(getCookie("nms")));
- } catch(e) {
- console.log("nothing saved");
- }
-
- for (var v in retrieve) {
- nms[v] = retrieve[v];
- }
- setMenu();
-}
-
-/*
- * Time travel gui
- */
-function startNowPicker(now) {
- $.datetimepicker.setLocale('no');
- $('#nowPicker').datetimepicker('destroy');
- if(!now && nms.now)
- now = nms.now;
- var datepicker = $('#nowPicker').datetimepicker({
- value: now,
- mask:false,
- inline:true,
- todayButton: false,
- validateOnBlur:false,
- dayOfWeekStart:1,
- maxDate:'+1970/01/01',
- onSelectDate: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- },
- onSelectTime: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- },
- onGenerate: function(ct,$i){
- document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
- }
- });
-}
diff --git a/web/nms.gathering.org/js/npm.js b/web/nms.gathering.org/js/npm.js
deleted file mode 100644
index bf6aa80..0000000
--- a/web/nms.gathering.org/js/npm.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
-require('../../js/transition.js')
-require('../../js/alert.js')
-require('../../js/button.js')
-require('../../js/carousel.js')
-require('../../js/collapse.js')
-require('../../js/dropdown.js')
-require('../../js/modal.js')
-require('../../js/tooltip.js')
-require('../../js/popover.js')
-require('../../js/scrollspy.js')
-require('../../js/tab.js')
-require('../../js/affix.js') \ No newline at end of file
diff --git a/web/stats.gathering.org/hover.gif b/web/stats.gathering.org/hover.gif
deleted file mode 100644
index 89f6055..0000000
--- a/web/stats.gathering.org/hover.gif
+++ /dev/null
Binary files differ
diff --git a/web/stats.gathering.org/index.css b/web/stats.gathering.org/index.css
deleted file mode 100644
index 6fde447..0000000
--- a/web/stats.gathering.org/index.css
+++ /dev/null
@@ -1,54 +0,0 @@
-body {
- background: #4A525A;
- background-attachment: fixed;
-}
-
-h1{
- text-align: center;
- color: #ccc;
- text-decoration: none;
- font-weight:normal;
-}
-
-h2{
- text-align: center;
- color: #ccc;
- text-decoration: none;
- font-weight:normal;
-}
-
-p{
- text-align: center;
- color: #ccc;
- text-decoration: none;
- font-weight:normal;
-}
-
-#menu {
- background: #333;
- list-style: none;
- margin: 0;
- padding: 0;
- width: 20em;
- margin-left: auto; margin-right: auto;
-}
-#menu li {
- font: 67.5% "Lucida Sans Unicode", "Bitstream Vera Sans", "Trebuchet Unicode MS", "Lucida Grande", Verdana, Helvetica, sans-serif;
- margin: 0;
- padding: 0;
-}
-#menu a {
- background: #333;
- border-bottom: 1px solid #393939;
- color: #ccc;
- display: block;
- margin: 0;
- padding: 8px 12px;
- text-decoration: none;
- font-weight:normal;
-}
-#menu a:hover {
- background: #2580a2 left center no-repeat;
- color: #fff;
- padding-bottom: 8px;
-}
diff --git a/web/stats.gathering.org/index.html b/web/stats.gathering.org/index.html
deleted file mode 100644
index 9455945..0000000
--- a/web/stats.gathering.org/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-<title>stats.tg16.gathering..org</title>
-<style type="text/css">
- @import url(index.css);
-</style>
-</head>
-<body>
-
-<h1>stats.tg16.gathering.org</h1>
-
-<br />
-<ul id="menu">
- <li><a href="https://nms-public.tg16.gathering.org/">Public NMS</a></li>
- <li><a href="https://github.com/tech-server/tgmanage/blob/master/web/nms.gathering.org/api/API.rst">Public NMS API documentation</a></li>
- <li><a href="https://nms-public.tg16.gathering.org/api/public/ping/">NMS API: ping</a></li>
- <li><a href="https://nms-public.tg16.gathering.org/api/public/switches/">NMS API: switches</a></li>
- <li><a href="https://nms-public.tg16.gathering.org/api/public/switch-state/">NMS API: switch-state</a></li>
- <li><a href="https://nms-public.tg16.gathering.org/api/public/dhcp/">NMS API: dhcp</a></li>
- <li><a href="https://nms-public.tg16.gathering.org/api/public/dhcp-summary/">NMS API: dhcp-summary</a></li>
-</ul>
-
-<br />
-<br />
-<br />
-<br />
-
-<h2>third-party stats (using NMS API)</h1>
-<br />
-<ul id="menu">
- <li><a href="http://tg16.sorlanet.net/TG16.html">Weathermap</a></li>
- <li><a href="http://live.tg16.sorlanet.net">Live network stats</a></li>
- <li><a href="http://monitor.tg16.sorlanet.net">Switch Graphs</a></li>
-</ul>
-
-<br />
-
-
-</body>
-</html>
diff --git a/web/stream.gathering.org/.htaccess b/web/stream.gathering.org/.htaccess
deleted file mode 100644
index 7a37cd3..0000000
--- a/web/stream.gathering.org/.htaccess
+++ /dev/null
@@ -1,4 +0,0 @@
-# Deny access to streamlib from web browser
-RewriteEngine On
-RewriteBase /
-RewriteRule ^streamlib.* - [F,L] \ No newline at end of file
diff --git a/web/stream.gathering.org/embed.pl b/web/stream.gathering.org/embed.pl
deleted file mode 100755
index ae76bea..0000000
--- a/web/stream.gathering.org/embed.pl
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage/web/stream.gathering.org/streamlib/
-use warnings;
-use strict;
-use CGI;
-# apt-get install libgeo-ip-perl
-use Geo::IP;
-use NetAddr::IP;
-use Net::IP;
-# apt-get install libnet-ip-perl libnetaddr-ip-perl
-use HTML::Template;
-# apt-get install libhtml-template-perl
-use stream;
-use stream::config;
-#use MIME::Base64;
-use URI::Escape;
-
-my $client = CGI->new;
-
-my $v4net = $stream::config::v4net;
-my $v6net = $stream::config::v6net;
-my $tg = $stream::config::tg;
-my $tg_full = $stream::config::tg_full;
-my $video_url_mp4;
-my $video_url = $stream::config::video_url;
-my $video_url_fallback = $stream::config::video_url_fallback;
-if($stream::config::video_url_mp4) {
-$video_url_mp4 = $stream::config::video_url_mp4;
-}
-my %streams = %stream::config::streams;
-
-my $force_unicast = $client->param('forceunicast');
-my $no_header = $client->param('noheader');
-
-my $location = undef;
-
-print $client->header();
-
-my $clip = $client->remote_addr();
-my $template = HTML::Template->new(filename => 'embed.tmpl');
-my $is_local = &is_ip_local($clip, $v4net, $v6net);
-
-#my @streams = &loop_webcams("event");
-#my @camstreams = &loop_webcams("camera");
-
-my %input;
-for my $key ( $client->param() ) {
- $input{$key} = $client->param($key);
-}
-
-#$template->param(TG => $tg);
-$template->param(TG_FULL => $tg_full);
-#$template->param(STREAMS => \@streams);
-#$template->param(CAMSTREAMS => \@camstreams);
-$template->param(NOHEADER => $no_header);
-if(exists $input{url}) {
- my $url = uri_unescape($input{url});
-
- if ($url ~~ %streams) {
- $template->param(VIDEO_URL_MAIN => $streams{$url}->{main_url});
- $template->param(VIDEO_URL_FALLBACK => $streams{$url}->{fallback_url});
- if($streams{$url}->{mp4_url}) {
- $template->param(VIDEO_URL_MP4 => $streams{$url}->{mp4_url});
- }
- }
- # Check against XS-scripting:
- #if (index($decodedUrl, 'cubemap.tg16.gathering.org/') != -1) {
- # $template->param(VIDEO_URL => $decodedUrl);
- #} elsif (index($decodedUrl, 'stream.tg16.gathering.org/') != -1) {
- # $template->param(VIDEO_URL => $decodedUrl);
- #} else {
- # $template->param(VIDEO_URL => $video_url);
- #}
-} else {
- $template->param(VIDEO_URL_MAIN => $video_url);
- $template->param(VIDEO_URL_FALLBACK => $video_url_fallback);
- if($video_url_mp4) {
- $template->param(VIDEO_URL_MP4 => $video_url_mp4);
- }
-}
-print $template->output();
-
-
-sub loop_webcams() {
- my @s = ();
- foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) {
- if ($streams{$name}->{type} eq $_[0] && $streams{$name}->{online}) {
- my $vlc_url = "http://stream.tg$tg.gathering.org/generate_vlc.pl?delivery=%s&stream=${name}&interlaced=%s";
- my $multicast = $streams{$name}->{has_multicast} ? "multicast" : "unicast";
- $multicast = "unicast" if (defined $force_unicast && $force_unicast == 1 || not $is_local);
-
- my $vlc_link = sprintf($vlc_url, $multicast, $streams{$name}->{interlaced});
- my $href_link = '<a class="stream-link-content" href="#" onclick="swapVideo(\'' . $name . '\');">';
-
- my %hash = (
- 'href' => $href_link,
- 'title' => $streams{$name}->{title},
- 'quality' => $streams{$name}->{quality},
- 'type' => $streams{$name}->{type},
- 'vlc_link' => $vlc_link,
- );
- push(@s, \%hash);
- }
- }
- return @s;
-}
diff --git a/web/stream.gathering.org/embed.tmpl b/web/stream.gathering.org/embed.tmpl
deleted file mode 100644
index ef3e11b..0000000
--- a/web/stream.gathering.org/embed.tmpl
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</title>
- <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
- <link href="//vjs.zencdn.net/5.8/video-js.min.css" rel="stylesheet">
- <script type="text/javascript" src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
- <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Droid+Sans" />
- <style>
-
-body {
- margin: 0;
-}
-
-.video-js {
- padding-bottom: 55%; /* video dimensions - height/width */
- height: 100%;
- width: 100%;
-}
- </style>
-</head>
-<body>
-<div class="losvideos">
- <TMPL_UNLESS NAME=NOHEADER>
- <video id="stream" class="videoframe video-js vjs-default-skin" controls preload="auto" poster="/resources/images/loading.png" data-setup='{ "autoplay" : true }'>
- <TMPL_IF NAME=VIDEO_URL_MP4><source src="<TMPL_VAR NAME=VIDEO_URL_MP4>" id="videodata" type="video/mp4"></TMPL_IF>
- <source src="<TMPL_VAR NAME=VIDEO_URL_MAIN>" id="videodata" type="video/flv">
- <source src="<TMPL_VAR NAME=VIDEO_URL_FALLBACK>" id="videodata" type="application/x-mpegURL">
- <p class="vjs-no-js">
- To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
- </p>
- </video>
- </TMPL_UNLESS>
-</div>
-<script src="//vjs.zencdn.net/5.8/video.js"></script>
-<script src="./resources/js/videojs-contrib-hls.js"></script>
-<script>
-
-var techOrder = ["html5", "flash"];
-if (navigator.userAgent.match(/Trident|Edge/)) {
- techOrder = ["flash", "html5"];
-}
-
-var player = videojs('stream', {
- techOrder: techOrder
-});
-player.play();
-</script>
-</body>
-</html>
-
-
diff --git a/web/stream.gathering.org/generate_vlc.pl b/web/stream.gathering.org/generate_vlc.pl
deleted file mode 100755
index 5252ec4..0000000
--- a/web/stream.gathering.org/generate_vlc.pl
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage/web/stream.gathering.org/streamlib
-
-use warnings;
-use strict;
-
-use stream;
-use stream::config;
-use CGI;
-my $client = CGI->new;
-
-my $stream = $client->param('stream');
-my $interlaced = $client->param('interlaced');
-my $delivery = $client->param('delivery');
-
-my $v4net = $stream::config::v4net;
-my $v6net = $stream::config::v6net;
-my $multicast_ip = $stream::config::multicast;
-my $tg = $stream::config::tg;
-my $base_url = $stream::config::vlc_base_host;
-my %streams = %stream::config::streams;
-
-
-
-#default
-if (not defined $delivery) {
- $delivery = "multicast";
-}
-
-if((not defined $stream) or (not defined $delivery)) {
- print $client->header();
- die "No stream and/or delivery method, robots unhappy :/\n";
-}
-
-my $url = "";
-my $port_del = "";
-my $port_str = "";
-my $extinf = "";
-my $url_path = "";
-
-my $clip = $client->remote_addr();
-
-if (exists($streams{$stream})) {
- my $is_multicast = 0;
- # add force is_ip_local in check?
- $is_multicast = 1 if (exists($streams{$stream}->{has_multicast}) && $delivery eq "multicast");
-
- if ($is_multicast) {
- $port_del = 20;
- $extinf .= "Multicasted";
- $url = $streams{$stream}->{multicast_ip};
- } else {
- #$port_del = 80;
- $extinf .= "Unicasted";
- $url = $base_url;
- $url_path = $streams{$stream}->{main_url};
- if($streams{$stream}->{ts_enabled} eq 1) {
- $url_path =~ s/.flv/.ts/;
- }
- }
-
- $port_del = $streams{$stream}->{preport} if (defined($streams{$stream}->{preport}));
- $port_str = $streams{$stream}->{port};
- $extinf .= " $streams{$stream}->{title}";
-
-} else {
- &error("No stream and/or delivery method, robots unhappy :-/");
-}
-
-#print out new file
-print $client->header(-type => "application/vlc",
- "-Content-disposition" => "attachment; filename=tg-".$delivery."-".$stream.".vlc"
-);
-
-print "#EXTM3U\n";
-print "#EXTINF:-1,TG$tg $extinf\n";
-if(defined $interlaced && $interlaced == 1) {
- print "#EXTVLCOPT:deinterlace=1\n";
- print "#EXTVLCOPT:deinterlace-mode=linear\n";
-}
-if ($port_str == 80) {
- print "$url$url_path\n";
-} else {
- print "$url:$port_del$port_str$url_path\n";
-}
-
-sub error($) {
- my $message = shift;
- print $client->header();
- die($message."\n");
-}
diff --git a/web/stream.gathering.org/img/cam-map.png b/web/stream.gathering.org/img/cam-map.png
deleted file mode 100644
index 759641a..0000000
--- a/web/stream.gathering.org/img/cam-map.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_1.png b/web/stream.gathering.org/img/icon_1.png
deleted file mode 100644
index 6d6e67e..0000000
--- a/web/stream.gathering.org/img/icon_1.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_2.png b/web/stream.gathering.org/img/icon_2.png
deleted file mode 100644
index 599d5f6..0000000
--- a/web/stream.gathering.org/img/icon_2.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_3.png b/web/stream.gathering.org/img/icon_3.png
deleted file mode 100644
index 4d1de76..0000000
--- a/web/stream.gathering.org/img/icon_3.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_camera.png b/web/stream.gathering.org/img/icon_camera.png
deleted file mode 100644
index e1bf2c3..0000000
--- a/web/stream.gathering.org/img/icon_camera.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_event.png b/web/stream.gathering.org/img/icon_event.png
deleted file mode 100644
index 9ce6df4..0000000
--- a/web/stream.gathering.org/img/icon_event.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_hd.png b/web/stream.gathering.org/img/icon_hd.png
deleted file mode 100644
index d9086bc..0000000
--- a/web/stream.gathering.org/img/icon_hd.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/img/icon_sd.png b/web/stream.gathering.org/img/icon_sd.png
deleted file mode 100644
index 3bddbe9..0000000
--- a/web/stream.gathering.org/img/icon_sd.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/index.pl b/web/stream.gathering.org/index.pl
deleted file mode 100755
index 9edcc20..0000000
--- a/web/stream.gathering.org/index.pl
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/perl -I /root/tgmanage/web/stream.gathering.org/streamlib/
-use warnings;
-use strict;
-use CGI;
-# apt-get install libgeo-ip-perl
-use Geo::IP;
-use NetAddr::IP;
-use Net::IP;
-# apt-get install libnet-ip-perl libnetaddr-ip-perl
-use HTML::Template;
-# apt-get install libhtml-template-perl
-use stream;
-use stream::config;
-#use MIME::Base64;
-use URI::Escape;
-
-my $client = CGI->new;
-my $video_url_mp4;
-my $v4net = $stream::config::v4net;
-my $v6net = $stream::config::v6net;
-my $tg = $stream::config::tg;
-my $tg_full = $stream::config::tg_full;
-my $video_url = $stream::config::video_url;
-my $video_url_fallback = $stream::config::video_url_fallback;
-if($stream::config::video_url_mp4) {
-$video_url_mp4 = $stream::config::video_url_mp4;
-}
-my %streams = %stream::config::streams;
-
-my $force_unicast = $client->param('forceunicast');
-my $no_header = $client->param('noheader');
-
-my $location = undef;
-
-print $client->header();
-
-my $clip = $client->remote_addr();
-my $template = HTML::Template->new(filename => 'index.tmpl');
-my $is_local = &is_ip_local($clip, $v4net, $v6net);
-
-my @streams = &loop_webcams("event");
-my @camstreams = &loop_webcams("camera");
-
-my %input;
-for my $key ( $client->param() ) {
- $input{$key} = $client->param($key);
-}
-
-$template->param(TG => $tg);
-$template->param(TG_FULL => $tg_full);
-$template->param(STREAMS => \@streams);
-$template->param(CAMSTREAMS => \@camstreams);
-$template->param(NOHEADER => $no_header);
-if(exists $input{url}) {
- my $url = uri_unescape($input{url});
-
- if ($url ~~ %streams) {
- $template->param(VIDEO_URL_MAIN => $streams{$url}->{main_url});
- $template->param(VIDEO_URL_FALLBACK => $streams{$url}->{fallback_url});
- if($streams{$url}->{mp4_url}) {
- $template->param(VIDEO_URL_MP4 => $streams{$url}->{mp4_url});
- }
- }
- # Check against XS-scripting:
- #if (index($decodedUrl, 'cubemap.tg16.gathering.org/') != -1) {
- # $template->param(VIDEO_URL => $decodedUrl);
- #} elsif (index($decodedUrl, 'stream.tg16.gathering.org/') != -1) {
- # $template->param(VIDEO_URL => $decodedUrl);
- #} else {
- # $template->param(VIDEO_URL => $video_url);
- #}
- $template->param(VIDEO_AUTO_PLAY => 'true');
-} else {
- $template->param(VIDEO_URL_MAIN => $video_url);
- $template->param(VIDEO_URL_FALLBACK => $video_url_fallback);
- if($video_url_mp4) {
- $template->param(VIDEO_URL_MP4 => $video_url_mp4);
- }
- $template->param(VIDEO_AUTO_PLAY => 'false');
-}
-print $template->output();
-
-
-sub loop_webcams() {
- my @s = ();
- foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) {
- if ($streams{$name}->{type} eq $_[0] && $streams{$name}->{online}) {
- my $vlc_url = "http://stream.tg$tg.gathering.org/generate_vlc.pl?delivery=%s&stream=${name}&interlaced=%s";
- my $multicast = $streams{$name}->{has_multicast} ? "multicast" : "unicast";
- $multicast = "unicast" if (defined $force_unicast && $force_unicast == 1 || not $is_local);
-
- my $vlc_link = sprintf($vlc_url, $multicast, $streams{$name}->{interlaced});
- my $href_link = '<a class="stream-link-content" href="#" onclick="swapVideo(\'' . $name . '\');">';
-
- my %hash = (
- 'href' => $href_link,
- 'title' => $streams{$name}->{title},
- 'quality' => $streams{$name}->{quality},
- 'type' => $streams{$name}->{type},
- 'vlc_link' => $vlc_link,
- );
- push(@s, \%hash);
- }
- }
- return @s;
-}
diff --git a/web/stream.gathering.org/index.tmpl b/web/stream.gathering.org/index.tmpl
deleted file mode 100644
index eca7070..0000000
--- a/web/stream.gathering.org/index.tmpl
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</title>
-
- <!-- Mobile specific
- ---------------------->
- <meta name="viewport" content="width=device-width, initial-scale=0.35">
-
- <!-- CSS specifics
- -------------------->
- <link rel="stylesheet" href="./resources/css/normalize.css">
- <link rel="stylesheet" href="./resources/css/skeleton.css">
- <link rel="stylesheet" href="./resources/css/core.css">
- <link rel="stylesheet" href="./resources/css/button-styles.css">
-
- <style type="text/css">
- .vjs-big-play-button {
- top:0;
- left:0;
- right:0;
- bottom:0;
- margin:auto;
- }
- </style>
-
- <!-- JavaScript specifics
- ---------------------------->
- <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
- <link href="//vjs.zencdn.net/5.8/video-js.min.css" rel="stylesheet">
- <script type="text/javascript" src="//www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
-
- <script type="text/javascript">
- function swapVideo (url) {
- window.location = '/?url=' + encodeURIComponent(url);//window.btoa(url);
- }
-
- var _float = true;
-
- function animateFloat() {
- if(_float) {
- $("#floater").animate({top: '-=20px'}, "slow");
- $("#floater").animate({top: '+=20px'}, "slow", animateFloat);
- }
- }
-
- function toggleAnimation() {
- $('#bubble').stop().fadeOut( 400 );
- if(_float) {
- _float = false;
- $("#floater").delay(800).animate({top: '172px'}, "slow");
- } else {
- _float = true;
- animateFloat();
- }
- }
-
- $(document).ready(function() {
- $("#floater").click(function() {
- toggleAnimation();
- });
- $("#bubble").click(function() {
- toggleAnimation();
- });
-
- //animateFloat();
- //$( "#bubble" ).delay( 5000 ).fadeOut( 400 );
- });
- </script>
-
- <style type="text/css">
- #floater {
- position: absolute;
- top: 172px;
- right: 0px;
- width: 531px;
- height: 396px;
- //background-image: url('/resources/images/floater.svg');
- background-size: cover;
- }
-
- #bubble {
- position: absolute;
- visibility: hidden;
- top: 62px;
- right: 170px;
- width: 200px;
- height: 25px;
- color: #000000;
- cursor: pointer;
- }
- </style>
-
-<!-- creative, event och game -->
-</head>
-<body>
- <div id="header">
- <img src="resources/images/thegathering.png" width="400">
- </div>
- <div class="section">
- <div class="container">
- <div class="row">
- <div class="twelve columns">
- <TMPL_UNLESS NAME=NOHEADER>
- <video id="stream" class="videoframe video-js vjs-default-skin" controls preload="auto" poster="/resources/images/loading.png" data-setup='{ "autoplay" : <TMPL_VAR NAME=VIDEO_AUTO_PLAY>, "techOrder": ["flash", "html5"]}'>
- <source src="<TMPL_VAR NAME=VIDEO_URL_MAIN>" id="videodata" type="video/flv" data-res="720">
- <TMPL_IF NAME=VIDEO_URL_MP4><source src="<TMPL_VAR NAME=VIDEO_URL_MP4>" id="videodata" type="video/mp4" data-res="720"></TMPL_IF>
- <source src="<TMPL_VAR NAME=VIDEO_URL_FALLBACK>" id="videodata" type="application/x-mpegURL" data-res="720">
- <p class="vjs-no-js">
- To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
- </p>
- </video>
- </TMPL_UNLESS>
- </div>
- </div>
- <div class="row">
- <div class="twelve columns">
- <p>Problems with the non game streams? The easiest way to get a hold of us is on IRC (EFNet); Either of ViD or DoXiD should be available if there's too much traffic on #tg to be heard.</p>
- </div>
- </div>
- <div class="row">
- <div class="one-half column">
-
- <TMPL_LOOP NAME="STREAMS">
- <div class="stream-item">
- <img class="stream-icon" src="img/icon_<TMPL_VAR NAME=QUALITY>.png" />
- <a href="<TMPL_VAR NAME=VLC_LINK>"><img class="stream-icon" src="/resources/images/vlc.png" /></a>
- <img class="stream-icon" src="img/icon_<TMPL_VAR NAME=TYPE>.png" />
- <TMPL_VAR NAME=HREF><TMPL_VAR NAME=TITLE></a>
- </div>
- </TMPL_LOOP>
-
- </div>
- <div class="one-half column">
- <TMPL_LOOP NAME="CAMSTREAMS">
- <div class="stream-item">
- <img class="stream-icon" src="img/icon_<TMPL_VAR NAME=QUALITY>.png" />
- <a href="<TMPL_VAR NAME=VLC_LINK>"><img class="stream-icon" src="/resources/images/vlc.png" /></a>
- <img class="stream-icon" src="img/icon_<TMPL_VAR NAME=TYPE>.png" />
- <TMPL_VAR NAME=HREF><TMPL_VAR NAME=TITLE></a>
- </div>
- </TMPL_LOOP>
- </div>
- </div>
- <div class="row footer">
- <div class="twelve columns">
- <p><a target="_blank" href="http://stream.tg<TMPL_VAR NAME="TG">.gathering.org">http://stream.tg<TMPL_VAR NAME="TG">.gathering.org</a></p>
- </div>
- </div>
- </div>
- </div>
-
-
-<script src="//vjs.zencdn.net/5.8/video.js"></script>
-<script src="./resources/js/videojs-contrib-hls.js"></script>
-<script>
-
-// GOOGLE CAST
-
-var current_media;
-var session;
-
-function show_castposter() {
- stop_loader();
- castposter.style.display = 'block';
- loader.style.display = 'none';
- video.style.display = 'none';
-}
-
-function hide_castposter() {
- castposter.style.display = 'none';
- loader.style.display = 'none';
- video.style.display = 'inline';
-}
-
-function stop_casting() {
- hide_castposter();
- if (current_media) {
- var media = current_media;
- current_media = null;
- media.stop();
- }
- if (session) {
- session.stop();
- session = null;
- }
-}
-
-function cast_current_video() {
- if (session === undefined || selected_stream === undefined) {
- return;
- }
- var title = streams[selected_stream].name;
- var url = streams[selected_stream].url;
- document.getElementById('casttarget').textContent = session.receiver.friendlyName;
- show_castposter();
- video.pause();
- // If we are already casting this, do nothing.
- if (current_media && current_media.media.contentId === url) {
- console.log("Already casting " + url + " to " + session.receiver.friendlyName + " (" + current_media.playerState + ")");
- return;
- }
- if (current_media) {
- current_media = null; // Signal to on_media_status_update.
- }
- var media_info = new chrome.cast.media.MediaInfo(url, "video/mp4");
- media_info.metadata = new chrome.cast.media.GenericMediaMetadata();
- media_info.metadata.title = global_title; // + ': ' + title;
- var request = new chrome.cast.media.LoadRequest(media_info);
- session.loadMedia(request,
- on_media_discovered.bind(this, 'loadMedia'),
- on_media_error);
-}
-
-var techOrder = ["html5", "flash"];
-if (navigator.userAgent.match(/Trident|Edge|OPR/)) {
- console.log("hit!");
- techOrder = ["flash", "html5"];
- //var video = document.getElementById('video');
- //video.src = "http://bleh";
-}
-var player = videojs('stream', {
- techOrder: techOrder
-});
-player.play();
-</script>
-</body>
-</html>
-
-
diff --git a/web/stream.gathering.org/resources/css/button-styles.css b/web/stream.gathering.org/resources/css/button-styles.css
deleted file mode 100644
index e70a197..0000000
--- a/web/stream.gathering.org/resources/css/button-styles.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@charset "utf-8";
-
-/*
-You are free to style the button however you wish. I plan to use
-an icon from my site's own icon font to make it more visible. These
-are just basic styles to make it look ok with plain text.
-*/
-
-/* Position the button */
-.vjs-res-button {
- float: right;
- line-height: 3em;
-}
-
-/* Don't show hover effects on title */
-ul li.vjs-menu-title.vjs-res-menu-title:hover {
- cursor: default;
- background-color: transparent;
- color: #CCC;
-
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-/* Needed to keep text visible in video.js 4.9 */
-.vjs-res-button .vjs-control-text {
- width: auto;
- height: auto;
- clip: auto;
-} \ No newline at end of file
diff --git a/web/stream.gathering.org/resources/css/core.css b/web/stream.gathering.org/resources/css/core.css
deleted file mode 100644
index e4bc7c2..0000000
--- a/web/stream.gathering.org/resources/css/core.css
+++ /dev/null
@@ -1,252 +0,0 @@
-body {
- background-color: rgb(54, 54, 54);
- color: #FFFFFF;
-}
-
-*:fullscreen {
- position:fixed;
- top:0;
- right:0;
- bottom:0;
- left:0;
- margin:0;
- box-sizing: border-box;
- width:100%;
- height:100%;
- object-fit: contain;
-}
-
-.button {
- font-weight: bold;
- color: #333;
- white-space: nowrap;
- vertical-align: middle;
- cursor: pointer;
- background-color: #eee;
- background-image: -webkit-linear-gradient(#fcfcfc, #eee);
- background-image: linear-gradient(#fcfcfc, #eee);
- background-repeat: repeat-x;
- border: 1px solid #d5d5d5;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-appearance: none;
-}
-
-.button-signup {
- color: #fff;
- text-shadow: 0 -1px 0 rgba(0,0,0,0.15);
- background-color: #60b044;
- background: -webkit-linear-gradient(#8add6d, #8add6d 12px, #60b044);
- background: linear-gradient(#8add6d, #8add6d 12px, #60b044);
- background-repeat: repeat-x;
- border-color: #5ca941;
-}
-
-#header {
- position: absolute;
- top: 0px;
- left: 0px;
- width: 100%;
- height: 518px;
- background-color: #ffffff;
- text-align: center;
- padding-top: 50px;
- color: #FFFFFF;
- background-color: #000000;
- /*background-image: url('http://git.hvornum.se/resources/images/tech-bg.jpg');*/
- /*text-shadow: 2px 2px #c2c2c2;*/
- background-repeat: no-repeat;
- background-size: cover;
-}
-
-.container {
- padding-top: 150px;
-}
-
-/*.videoframe {*/
-/* left: 50%;*/
-/*}*/
-
-.section {
- padding: 8rem 0 7rem;
- text-align: center;
-}
-
-.stream-item {
- text-align: left;
-}
-
- .stream-icon {
- width: 51px;
- height: 52px;
- display: inline-block;
- }
-
- .stream-link-content {
- position: relative;
- text-align: left;
- display: inline-block;
- top: -2rem;
- }
-
-#stream {
- width: 960px;
- min-width: 960px;
- height: 540px;
- min-height: 540px;
- margin-bottom: 10px;
- border: 1px solid #000000;
-}
-
-.vjs-poster {
- background-size: cover !important;
-}
-
-.footer {
- text-align: center;
- padding-top: 50px;
-}
-
-.bubble
-{
- position: relative;
- width: 100%;
- height: 100%;
- padding: 0px;
- background: #FFFFFF;
- -webkit-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
- border: #7F7F7F solid 2px;
- padding: 10px;
-}
-
- .bubble:after
- {
- content: '';
- position: absolute;
- border-style: solid;
- border-width: 16px 12px 0;
- border-color: #FFFFFF transparent;
- display: block;
- width: 0;
- z-index: 1;
- bottom: -15px;
- left: 130px;
- }
-
- .bubble:before
- {
- content: '';
- position: absolute;
- border-style: solid;
- border-width: 17px 13px 0;
- border-color: #7F7F7F transparent;
- display: block;
- width: 0;
- z-index: 0;
- bottom: -19px;
- left: 129px;
- }
-
-/* Bigger than 550 */
-@media (min-width: 550px) {
- .section {
- padding: 12rem 0 11rem;
- padding-bottom: 30px;
- }
- .content { text-align: left; }
- #floater {
- min-width: 300px;
- min-height: 190px;
- width: 300px;
- height: 190px;
- }
- #stream {
- min-width: 320px;
- min-height: 183px;
- }
- /*.videoframe {
- margin-left: -160px;
- }*/
- /*.videoframe:-webkit-full-screen { margin-left: 0px; }
- .videoframe:-moz-full-screen { margin-left: 0px; }*/
-}
-
-/* Bigger than 920 */
-@media (min-width: 920px) {
- .section {
- padding: 5rem 0 5rem;
- padding-bottom: 30px;
- }
- .content { text-align: left; }
- #floater {
- min-width: 300px;
- min-height: 190px;
- width: 300px;
- height: 190px;
- }
- #stream {
- min-width: 500px;
- min-height: 280px;
- }
- /*
- .videoframe {
- margin-left: -490px;
- }
- .videoframe:-webkit-full-screen { margin-left: 0px; }
- .videoframe:-moz-full-screen { margin-left: 0px; }
-*/
-}
-
-/* Bigger than 1200 */
-@media (min-width: 1200px) {
- .section {
- padding: 1rem 0 1rem;
- padding-bottom: 30px;
- }
- .content { text-align: left; }
- #floater {
- min-width: 531px;
- min-height: 396px;
- }
- #stream {
- min-width: 700px;
- min-height: 393px;
- }
-/*
- .videoframe {
- margin-left: -350px;
- }
- .videoframe:-webkit-full-screen { margin-left: 0px; }
- .videoframe:-moz-full-screen { margin-left: 0px; }
-*/
-}
-
-/* Bigger than 1600 */
-@media (min-width: 1600px) {
- .section {
- padding: 1rem 0 1rem;
- padding-bottom: 30px;
- }
- .content { text-align: left; }
- #floater {
- min-width: 531px;
- min-height: 396px;
- }
- #stream {
- width: 960px;
- min-width: 960px;
- height: 540px;
- min-height: 540px;
- }
-/*
- .videoframe {
- margin-left: -480px;
- }
- .videoframe:-webkit-full-screen { margin-left: 0px; }
- .videoframe:-moz-full-screen { margin-left: 0px; }
-*/
-}
diff --git a/web/stream.gathering.org/resources/css/normalize.css b/web/stream.gathering.org/resources/css/normalize.css
deleted file mode 100644
index 81c6f31..0000000
--- a/web/stream.gathering.org/resources/css/normalize.css
+++ /dev/null
@@ -1,427 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
-html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box; /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-} \ No newline at end of file
diff --git a/web/stream.gathering.org/resources/css/skeleton.css b/web/stream.gathering.org/resources/css/skeleton.css
deleted file mode 100644
index f28bf6c..0000000
--- a/web/stream.gathering.org/resources/css/skeleton.css
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
-* Skeleton V2.0.4
-* Copyright 2014, Dave Gamache
-* www.getskeleton.com
-* Free to use under the MIT license.
-* http://www.opensource.org/licenses/mit-license.php
-* 12/29/2014
-*/
-
-
-/* Table of contents
-––––––––––––––––––––––––––––––––––––––––––––––––––
-- Grid
-- Base Styles
-- Typography
-- Links
-- Buttons
-- Forms
-- Lists
-- Code
-- Tables
-- Spacing
-- Utilities
-- Clearing
-- Media Queries
-*/
-
-
-/* Grid
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.container {
- position: relative;
- width: 100%;
- max-width: 960px;
- margin: 0 auto;
- padding: 0 20px;
- box-sizing: border-box; }
-.column,
-.columns {
- width: 100%;
- float: left;
- box-sizing: border-box; }
-
-/* For devices larger than 400px */
-@media (min-width: 400px) {
- .container {
- width: 85%;
- padding: 0; }
-}
-
-/* For devices larger than 550px */
-@media (min-width: 550px) {
- .container {
- width: 80%; }
- .column,
- .columns {
- margin-left: 4%; }
- .column:first-child,
- .columns:first-child {
- margin-left: 0; }
-
- .one.column,
- .one.columns { width: 4.66666666667%; }
- .two.columns { width: 13.3333333333%; }
- .three.columns { width: 22%; }
- .four.columns { width: 30.6666666667%; }
- .five.columns { width: 39.3333333333%; }
- .six.columns { width: 48%; }
- .seven.columns { width: 56.6666666667%; }
- .eight.columns { width: 65.3333333333%; }
- .nine.columns { width: 74.0%; }
- .ten.columns { width: 82.6666666667%; }
- .eleven.columns { width: 91.3333333333%; }
- .twelve.columns { width: 100%; margin-left: 0; }
-
- .one-third.column { width: 30.6666666667%; }
- .two-thirds.column { width: 65.3333333333%; }
-
- .one-half.column { width: 48%; }
-
- /* Offsets */
- .offset-by-one.column,
- .offset-by-one.columns { margin-left: 8.66666666667%; }
- .offset-by-two.column,
- .offset-by-two.columns { margin-left: 17.3333333333%; }
- .offset-by-three.column,
- .offset-by-three.columns { margin-left: 26%; }
- .offset-by-four.column,
- .offset-by-four.columns { margin-left: 34.6666666667%; }
- .offset-by-five.column,
- .offset-by-five.columns { margin-left: 43.3333333333%; }
- .offset-by-six.column,
- .offset-by-six.columns { margin-left: 52%; }
- .offset-by-seven.column,
- .offset-by-seven.columns { margin-left: 60.6666666667%; }
- .offset-by-eight.column,
- .offset-by-eight.columns { margin-left: 69.3333333333%; }
- .offset-by-nine.column,
- .offset-by-nine.columns { margin-left: 78.0%; }
- .offset-by-ten.column,
- .offset-by-ten.columns { margin-left: 86.6666666667%; }
- .offset-by-eleven.column,
- .offset-by-eleven.columns { margin-left: 95.3333333333%; }
-
- .offset-by-one-third.column,
- .offset-by-one-third.columns { margin-left: 34.6666666667%; }
- .offset-by-two-thirds.column,
- .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
-
- .offset-by-one-half.column,
- .offset-by-one-half.columns { margin-left: 52%; }
-
-}
-
-
-/* Base Styles
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/* NOTE
-html is set to 62.5% so that all the REM measurements throughout Skeleton
-are based on 10px sizing. So basically 1.5rem = 15px :) */
-html {
- font-size: 62.5%; }
-body {
- font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
- line-height: 1.6;
- font-weight: 400;
- font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
- color: #222; }
-
-
-/* Typography
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-h1, h2, h3, h4, h5, h6 {
- margin-top: 0;
- margin-bottom: 2rem;
- font-weight: 300; }
-h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
-h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
-h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
-h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
-h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
-h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
-
-/* Larger than phablet */
-@media (min-width: 550px) {
- h1 { font-size: 5.0rem; }
- h2 { font-size: 4.2rem; }
- h3 { font-size: 3.6rem; }
- h4 { font-size: 3.0rem; }
- h5 { font-size: 2.4rem; }
- h6 { font-size: 1.5rem; }
-}
-
-p {
- margin-top: 0; }
-
-
-/* Links
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-a {
- color: #1EAEDB; }
-a:hover {
- color: #0FA0CE; }
-
-
-/* Buttons
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.button,
-button,
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
- display: inline-block;
- height: 38px;
- padding: 0 30px;
- color: #555;
- text-align: center;
- font-size: 11px;
- font-weight: 600;
- line-height: 38px;
- letter-spacing: .1rem;
- text-transform: uppercase;
- text-decoration: none;
- white-space: nowrap;
- background-color: transparent;
- border-radius: 4px;
- border: 1px solid #bbb;
- cursor: pointer;
- box-sizing: border-box; }
-.button:hover,
-button:hover,
-input[type="submit"]:hover,
-input[type="reset"]:hover,
-input[type="button"]:hover,
-.button:focus,
-button:focus,
-input[type="submit"]:focus,
-input[type="reset"]:focus,
-input[type="button"]:focus {
- color: #333;
- border-color: #888;
- outline: 0; }
-.button.button-primary,
-button.button-primary,
-input[type="submit"].button-primary,
-input[type="reset"].button-primary,
-input[type="button"].button-primary {
- color: #FFF;
- background-color: #33C3F0;
- border-color: #33C3F0; }
-.button.button-primary:hover,
-button.button-primary:hover,
-input[type="submit"].button-primary:hover,
-input[type="reset"].button-primary:hover,
-input[type="button"].button-primary:hover,
-.button.button-primary:focus,
-button.button-primary:focus,
-input[type="submit"].button-primary:focus,
-input[type="reset"].button-primary:focus,
-input[type="button"].button-primary:focus {
- color: #FFF;
- background-color: #1EAEDB;
- border-color: #1EAEDB; }
-
-
-/* Forms
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea,
-select {
- height: 38px;
- padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
- background-color: #fff;
- border: 1px solid #D1D1D1;
- border-radius: 4px;
- box-shadow: none;
- box-sizing: border-box; }
-/* Removes awkward default styles on some inputs for iOS */
-input[type="email"],
-input[type="number"],
-input[type="search"],
-input[type="text"],
-input[type="tel"],
-input[type="url"],
-input[type="password"],
-textarea {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
-textarea {
- min-height: 65px;
- padding-top: 6px;
- padding-bottom: 6px; }
-input[type="email"]:focus,
-input[type="number"]:focus,
-input[type="search"]:focus,
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="url"]:focus,
-input[type="password"]:focus,
-textarea:focus,
-select:focus {
- border: 1px solid #33C3F0;
- outline: 0; }
-label,
-legend {
- display: block;
- margin-bottom: .5rem;
- font-weight: 600; }
-fieldset {
- padding: 0;
- border-width: 0; }
-input[type="checkbox"],
-input[type="radio"] {
- display: inline; }
-label > .label-body {
- display: inline-block;
- margin-left: .5rem;
- font-weight: normal; }
-
-
-/* Lists
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-ul {
- list-style: circle inside; }
-ol {
- list-style: decimal inside; }
-ol, ul {
- padding-left: 0;
- margin-top: 0; }
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin: 1.5rem 0 1.5rem 3rem;
- font-size: 90%; }
-li {
- margin-bottom: 1rem; }
-
-
-/* Code
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-code {
- padding: .2rem .5rem;
- margin: 0 .2rem;
- font-size: 90%;
- white-space: nowrap;
- background: #F1F1F1;
- border: 1px solid #E1E1E1;
- border-radius: 4px; }
-pre > code {
- display: block;
- padding: 1rem 1.5rem;
- white-space: pre; }
-
-
-/* Tables
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-th,
-td {
- padding: 12px 15px;
- text-align: left;
- border-bottom: 1px solid #E1E1E1; }
-th:first-child,
-td:first-child {
- padding-left: 0; }
-th:last-child,
-td:last-child {
- padding-right: 0; }
-
-
-/* Spacing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-button,
-.button {
- margin-bottom: 1rem; }
-input,
-textarea,
-select,
-fieldset {
- margin-bottom: 1.5rem; }
-pre,
-blockquote,
-dl,
-figure,
-table,
-p,
-ul,
-ol,
-form {
- margin-bottom: 2.5rem; }
-
-
-/* Utilities
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-.u-full-width {
- width: 100%;
- box-sizing: border-box; }
-.u-max-full-width {
- max-width: 100%;
- box-sizing: border-box; }
-.u-pull-right {
- float: right; }
-.u-pull-left {
- float: left; }
-
-
-/* Misc
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-hr {
- margin-top: 3rem;
- margin-bottom: 3.5rem;
- border-width: 0;
- border-top: 1px solid #E1E1E1; }
-
-
-/* Clearing
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-
-/* Self Clearing Goodness */
-.container:after,
-.row:after,
-.u-cf {
- content: "";
- display: table;
- clear: both; }
-
-
-/* Media Queries
-–––––––––––––––––––––––––––––––––––––––––––––––––– */
-/*
-Note: The best way to structure the use of media queries is to create the queries
-near the relevant code. For example, if you wanted to change the styles for buttons
-on small devices, paste the mobile query code up in the buttons section and style it
-there.
-*/
-
-
-/* Larger than mobile */
-@media (min-width: 400px) {}
-
-/* Larger than phablet (also point when grid becomes active) */
-@media (min-width: 550px) {}
-
-/* Larger than tablet */
-@media (min-width: 750px) {}
-
-/* Larger than desktop */
-@media (min-width: 1000px) {}
-
-/* Larger than Desktop HD */
-@media (min-width: 1200px) {}
diff --git a/web/stream.gathering.org/resources/css/video-js-resolutions.css b/web/stream.gathering.org/resources/css/video-js-resolutions.css
deleted file mode 100644
index 2388623..0000000
--- a/web/stream.gathering.org/resources/css/video-js-resolutions.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Resolutions
--------------------------------------------------------------------------------- */
-
-@font-face{
- font-family: 'VideoJS-Resolutions';
- src: url('Font/fonts/VideoJS-Resolutions.eot');
- src: url('Font/fonts/VideoJS-Resolutions.eot?#iefix') format('embedded-opentype'),
- url('Font/fonts/VideoJS-Resolutions.woff') format('woff'),
- url('Font/fonts/VideoJS-Resolutions.ttf') format('truetype');
- font-weight: normal;
- font-style: normal;
-}
-
-.vjs-default-skin .vjs-resolutions-button {
- width: 5em;
- cursor: pointer !important;
-}
-
-/* Resolutions Icon */
-
-.vjs-default-skin .vjs-resolutions-button .vjs-control-content:before {
- font-family: VideoJS-Resolutions;
- font-size: 1.5em;
- line-height: 2em;
- content: "\e000"; /* Gear icon */
- width: 17px;
- height: 17px;
- margin: 0.5em auto 0;
-}
-
-.vjs-default-skin .vjs-control-content:hover:before {
-text-shadow: 0em 0em 1em #FFF;
-}
diff --git a/web/stream.gathering.org/resources/css/video-js.css b/web/stream.gathering.org/resources/css/video-js.css
deleted file mode 100644
index 0acfd59..0000000
--- a/web/stream.gathering.org/resources/css/video-js.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
-Video.js Default Styles (http://videojs.com)
-Version 4.12.5
-Create your own skin at http://designer.videojs.com
-*/.vjs-default-skin{color:#ccc}@font-face{font-family:VideoJS;src:url(../f/3/vjs.eot);src:url(../f/3/vjs.eot?#iefix) format('embedded-opentype'),url(../fonts/vjs.woff) format('woff'),url(../fonts/vjs.ttf) format('truetype'),url(../f/3/vjs.svg#icomoon) format('svg');font-weight:400;font-style:normal}.vjs-default-skin .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;background-color:#333;background-color:rgba(51,51,51,.9)}.vjs-default-skin .vjs-slider:focus{-webkit-box-shadow:0 0 2em #fff;-moz-box-shadow:0 0 2em #fff;box-shadow:0 0 2em #fff}.vjs-default-skin .vjs-slider-handle{position:absolute;left:0;top:0}.vjs-default-skin .vjs-slider-handle:before{content:"\e009";font-family:VideoJS;font-size:1em;line-height:1;text-align:center;text-shadow:0 0 1em #fff;position:absolute;top:0;left:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.vjs-default-skin .vjs-control-bar{display:none;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#07141e;background-color:rgba(7,20,30,.7)}.vjs-default-skin.vjs-has-started .vjs-control-bar{display:block;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{display:block;visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-default-skin.vjs-controls-disabled .vjs-control-bar{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-control-bar{display:none}.vjs-default-skin.vjs-error .vjs-control-bar{display:none}.vjs-audio.vjs-default-skin.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}@media \0screen{.vjs-default-skin.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.vjs-default-skin .vjs-control{outline:0;position:relative;float:left;text-align:center;margin:0;padding:0;height:3em;width:4em}.vjs-default-skin .vjs-control:before{font-family:VideoJS;font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-control:focus:before,.vjs-default-skin .vjs-control:hover:before{text-shadow:0 0 1em #fff}.vjs-default-skin .vjs-control:focus{}.vjs-default-skin .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-default-skin .vjs-play-control{width:5em;cursor:pointer}.vjs-default-skin .vjs-play-control:before{content:"\e001"}.vjs-default-skin.vjs-playing .vjs-play-control:before{content:"\e002"}.vjs-default-skin .vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.5)}.vjs-default-skin .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content{width:4em;left:-2em;list-style:none}.vjs-default-skin .vjs-mute-control,.vjs-default-skin .vjs-volume-menu-button{cursor:pointer;float:right}.vjs-default-skin .vjs-mute-control:before,.vjs-default-skin .vjs-volume-menu-button:before{content:"\e006"}.vjs-default-skin .vjs-mute-control.vjs-vol-0:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-0:before{content:"\e003"}.vjs-default-skin .vjs-mute-control.vjs-vol-1:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-1:before{content:"\e004"}.vjs-default-skin .vjs-mute-control.vjs-vol-2:before,.vjs-default-skin .vjs-volume-menu-button.vjs-vol-2:before{content:"\e005"}.vjs-default-skin .vjs-volume-control{width:5em;float:right}.vjs-default-skin .vjs-volume-bar{width:5em;height:.6em;margin:1.1em auto 0}.vjs-default-skin .vjs-volume-level{position:absolute;top:0;left:0;height:.5em;width:100%;background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-volume-bar .vjs-volume-handle{width:.5em;height:.5em;left:4.5em}.vjs-default-skin .vjs-volume-handle:before{font-size:.9em;top:-.2em;left:-.2em;width:1em;height:1em}.vjs-default-skin .vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-default-skin .vjs-volume-menu-button .vjs-menu .vjs-menu-content{height:0;width:0}.vjs-default-skin .vjs-volume-menu-button:hover .vjs-menu,.vjs-default-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing{border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-volume-menu-button:hover .vjs-menu .vjs-menu-content,.vjs-default-skin .vjs-volume-menu-button .vjs-menu.vjs-lock-showing .vjs-menu-content{height:2.9em;width:10em}.vjs-default-skin .vjs-progress-control{position:absolute;left:0;right:0;width:auto;font-size:.3em;height:1em;top:-1em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin:hover .vjs-progress-control{font-size:.9em;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s}.vjs-default-skin .vjs-progress-holder{height:100%}.vjs-default-skin .vjs-progress-holder .vjs-play-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress,.vjs-default-skin .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0;left:0;top:0}.vjs-default-skin .vjs-play-progress{background:#66a8cc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAP0lEQVQIHWWMAQoAIAgDR/QJ/Ub//04+w7ZICBwcOg5FZi5iBB82AGzixEglJrd4TVK5XUJpskSTEvpdFzX9AB2pGziSQcvAAAAAAElFTkSuQmCC) -50% 0 repeat}.vjs-default-skin .vjs-load-progress{background:#646464;background:rgba(255,255,255,.2)}.vjs-default-skin .vjs-load-progress div{background:#787878;background:rgba(255,255,255,.1)}.vjs-default-skin .vjs-seek-handle{width:1.5em;height:100%}.vjs-default-skin .vjs-seek-handle:before{padding-top:.1em}.vjs-default-skin.vjs-live .vjs-time-controls,.vjs-default-skin.vjs-live .vjs-time-divider,.vjs-default-skin.vjs-live .vjs-progress-control{display:none}.vjs-default-skin.vjs-live .vjs-live-display{display:block}.vjs-default-skin .vjs-live-display{display:none;font-size:1em;line-height:3em}.vjs-default-skin .vjs-time-controls{font-size:1em;line-height:3em}.vjs-default-skin .vjs-current-time{float:left}.vjs-default-skin .vjs-duration{float:left}.vjs-default-skin .vjs-remaining-time{display:none;float:left}.vjs-time-divider{float:left;line-height:3em}.vjs-default-skin .vjs-fullscreen-control{width:3.8em;cursor:pointer;float:right}.vjs-default-skin .vjs-fullscreen-control:before{content:"\e000"}.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control:before{content:"\e00b"}.vjs-default-skin .vjs-big-play-button{left:.5em;top:.5em;font-size:3em;display:block;z-index:2;position:absolute;width:4em;height:2.6em;text-align:center;vertical-align:middle;cursor:pointer;opacity:1;background-color:#07141e;background-color:rgba(7,20,30,.7);border:.1em solid #3b4249;-webkit-border-radius:.8em;-moz-border-radius:.8em;border-radius:.8em;-webkit-box-shadow:0 0 1em rgba(255,255,255,.25);-moz-box-shadow:0 0 1em rgba(255,255,255,.25);box-shadow:0 0 1em rgba(255,255,255,.25);-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-default-skin.vjs-big-play-centered .vjs-big-play-button{left:50%;margin-left:-2.1em;top:50%;margin-top:-1.4000000000000001em}.vjs-default-skin.vjs-controls-disabled .vjs-big-play-button{display:none}.vjs-default-skin.vjs-has-started .vjs-big-play-button{display:none}.vjs-default-skin.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-default-skin:hover .vjs-big-play-button,.vjs-default-skin .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#505050;background-color:rgba(50,50,50,.75);-webkit-box-shadow:0 0 3em #fff;-moz-box-shadow:0 0 3em #fff;box-shadow:0 0 3em #fff;-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-default-skin .vjs-big-play-button:before{content:"\e001";font-family:VideoJS;line-height:2.6em;text-shadow:.05em .05em .1em #000;text-align:center;position:absolute;left:0;width:100%;height:100%}.vjs-error .vjs-big-play-button{display:none}.vjs-error-display{display:none}.vjs-error .vjs-error-display{display:block;position:absolute;left:0;top:0;width:100%;height:100%}.vjs-error .vjs-error-display:before{content:'X';font-family:Arial;font-size:4em;color:#666;line-height:1;text-shadow:.05em .05em .1em #000;text-align:center;vertical-align:middle;position:absolute;left:0;top:50%;margin-top:-.5em;width:100%}.vjs-error-display div{position:absolute;bottom:1em;right:0;left:0;font-size:1.4em;text-align:center;padding:3px;background:#000;background:rgba(0,0,0,.5)}.vjs-error-display a,.vjs-error-display a:visited{color:#F4A460}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:4em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75}.vjs-waiting .vjs-loading-spinner,.vjs-seeking .vjs-loading-spinner{display:block;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-error .vjs-loading-spinner{display:none;-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.vjs-default-skin .vjs-loading-spinner:before{content:"\e01e";font-family:VideoJS;position:absolute;top:0;left:0;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.vjs-default-skin .vjs-menu-button{float:right;cursor:pointer}.vjs-default-skin .vjs-menu{display:none;position:absolute;bottom:0;left:0;width:0;height:0;margin-bottom:3em;border-left:2em solid transparent;border-right:2em solid transparent;border-top:1.55em solid #000;border-top-color:rgba(7,40,50,.5)}.vjs-default-skin .vjs-menu-button .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;position:absolute;width:10em;bottom:1.5em;max-height:15em;overflow:auto;left:-5em;background-color:#07141e;background-color:rgba(7,20,30,.7);-webkit-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);-moz-box-shadow:-.2em -.2em .3em rgba(255,255,255,.2);box-shadow:-.2em -.2em .3em rgba(255,255,255,.2)}.vjs-default-skin .vjs-menu-button:hover .vjs-control-content .vjs-menu,.vjs-default-skin .vjs-control-content .vjs-menu.vjs-lock-showing{display:block}.vjs-default-skin.vjs-scrubbing .vjs-menu-button:hover .vjs-control-content .vjs-menu{display:none}.vjs-default-skin .vjs-menu-button ul li{list-style:none;margin:0;padding:.3em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-default-skin .vjs-menu-button ul li.vjs-selected{background-color:#000}.vjs-default-skin .vjs-menu-button ul li:focus,.vjs-default-skin .vjs-menu-button ul li:hover,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover{outline:0;color:#111;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-default-skin .vjs-subtitles-button:before{content:"\e00c"}.vjs-default-skin .vjs-captions-button:before{content:"\e008"}.vjs-default-skin .vjs-chapters-button:before{content:"\e00c"}.vjs-default-skin .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content{width:24em;left:-12em}.vjs-default-skin .vjs-captions-button:focus .vjs-control-content:before,.vjs-default-skin .vjs-captions-button:hover .vjs-control-content:before{-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js{background-color:#000;position:relative;padding:0;font-size:10px;vertical-align:middle;font-weight:400;font-style:normal;font-family:Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js:-moz-full-screen{position:absolute}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0;width:100%!important;height:100%!important;_position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-poster{background-repeat:no-repeat;background-position:50% 50%;background-size:contain;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0}.vjs-poster img{display:block;margin:0 auto;max-height:100%;padding:0;width:100%}.video-js.vjs-has-started .vjs-poster{display:none}.video-js.vjs-audio.vjs-has-started .vjs-poster{display:block}.video-js.vjs-controls-disabled .vjs-poster{display:none}.video-js.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-text-track-display{position:absolute;top:0;left:0;bottom:3em;right:0;pointer-events:none}.vjs-caption-settings{position:relative;top:1em;background-color:#000;opacity:.75;color:#FFF;margin:0 auto;padding:.5em;height:15em;font-family:Arial,Helvetica,sans-serif;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-font:after,.vjs-caption-settings .vjs-tracksettings-controls:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings input[type=button]{width:40px;height:40px}.vjs-hidden{display:none!important}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:2em;color:#ccc;background-color:#333;font-size:1.8em;font-family:Arial,sans-serif;text-align:center;width:30em;height:15em;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#F4A460}
diff --git a/web/stream.gathering.org/resources/fonts/vjs.ttf b/web/stream.gathering.org/resources/fonts/vjs.ttf
deleted file mode 100644
index 682a9b2..0000000
--- a/web/stream.gathering.org/resources/fonts/vjs.ttf
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/fonts/vjs.woff b/web/stream.gathering.org/resources/fonts/vjs.woff
deleted file mode 100644
index de98206..0000000
--- a/web/stream.gathering.org/resources/fonts/vjs.woff
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/images/loading.png b/web/stream.gathering.org/resources/images/loading.png
deleted file mode 100644
index e31dc53..0000000
--- a/web/stream.gathering.org/resources/images/loading.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/images/logo.svg b/web/stream.gathering.org/resources/images/logo.svg
deleted file mode 100644
index 3030740..0000000
--- a/web/stream.gathering.org/resources/images/logo.svg
+++ /dev/null
@@ -1,5585 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
- <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
- <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
- <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
- <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
- <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
- <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
- <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
-]>
-<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 400 90"
- enable-background="new 0 0 400 90" xml:space="preserve">
-<switch>
- <foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
- <i:pgfRef xlink:href="#adobe_illustrator_pgf">
- </i:pgfRef>
- </foreignObject>
- <g i:extraneous="self">
- <g>
- <g>
- <g>
- <polygon fill="#FF7000" points="65.05,0.02 0,88.54 16.08,88.54 39.37,56.85 47.04,46.41 "/>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.2503" y1="24.2554" x2="56.0571" y2="16.0561">
- <stop offset="0" style="stop-color:#FF7000"/>
- <stop offset="1" style="stop-color:#FFA502"/>
- </linearGradient>
- <polygon fill="url(#SVGID_1_)" points="81.13,0.02 65.05,0.02 47.04,46.41 "/>
- <polygon fill="#FF7000" points="39.37,56.85 82.5,88.54 104.37,88.54 "/>
- <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="105.4888" y1="87.0281" x2="43.4011" y2="51.7447">
- <stop offset="0" style="stop-color:#FF7000"/>
- <stop offset="1" style="stop-color:#FFA502"/>
- </linearGradient>
- <polygon fill="url(#SVGID_2_)" points="47.04,46.41 39.37,56.85 104.37,88.54 "/>
- </g>
- <g>
- <polygon fill="#05CCFF" points="135.02,12.97 135.02,0.02 87.54,0.02 94.07,12.97 "/>
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="92.4191" y1="3.3546" x2="72.7261" y2="41.6465">
- <stop offset="0" style="stop-color:#05CCFF"/>
- <stop offset="1" style="stop-color:#13A7CC"/>
- </linearGradient>
- <polygon fill="url(#SVGID_3_)" points="94.07,12.97 87.54,0.02 72.33,42.54 "/>
- <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="86.3412" y1="38.3736" x2="104.1196" y2="51.7758">
- <stop offset="0" style="stop-color:#05CCFF"/>
- <stop offset="1" style="stop-color:#13A7CC"/>
- </linearGradient>
- <polygon fill="url(#SVGID_4_)" points="106.93,61.59 97.63,38.68 79.53,41.45 "/>
- <polygon fill="#05CCFF" points="106.93,45.51 97.63,38.68 106.93,61.59 "/>
- <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="128.3716" y1="100.5334" x2="129.1922" y2="21.7612">
- <stop offset="0" style="stop-color:#05CCFF"/>
- <stop offset="1" style="stop-color:#13A7CC"/>
- </linearGradient>
- <polygon fill="url(#SVGID_5_)" points="135.02,88.54 135.02,18.12 122.07,79.09 "/>
- <polygon fill="#05CCFF" points="72.33,42.54 87.54,0.02 87.52,0 54.24,45.32 113.06,88.54 134.94,88.54 135.02,88.54
- 122.07,79.09 "/>
- <polygon fill="#05CCFF" points="135.02,18.12 132.37,18.12 122.07,18.12 96.66,18.12 96.66,18.15 96.65,18.14 79.53,41.44
- 79.54,41.44 79.53,41.45 97.63,38.68 103.22,31.08 122.07,31.08 122.07,79.09 "/>
- </g>
- </g>
- <g>
- <g>
- <g>
- <path fill="#363636" d="M163.26,65.17v-7.14h11.98v30.51h-15.42c-6.07,0-9.1-3.31-9.1-9.93V39.74c0-6.73,3.03-10.09,9.1-10.09
- h5.41c6.67,0,10.01,3.42,10.01,10.25v6.4h-7.87v-5.25c0-2.84-1.12-4.27-3.36-4.27h-1.97c-2.3,0-3.44,1.42-3.44,4.27v36.09
- c0,2.84,1.15,4.27,3.44,4.27h5.33V65.17H163.26z"/>
- <path fill="#363636" d="M189.1,88.54h-7.87v-48.8c0-6.73,3.14-10.09,9.43-10.09h5.91c6.29,0,9.43,3.36,9.43,10.09v48.8h-7.87
- V65.17h-9.02V88.54z M198.12,58.03v-17.8c0-2.3-1.15-3.45-3.45-3.45h-2.13c-2.3,0-3.44,1.15-3.44,3.45v17.8H198.12z"/>
- <path fill="#363636" d="M225.51,36.79v51.76h-7.87V36.79h-7.55v-7.14h22.97v7.14H225.51z"/>
- <path fill="#363636" d="M255.12,88.54V65.17h-9.68v23.38h-7.87V29.65h7.87v28.38h9.68V29.65H263v58.89H255.12z"/>
- <path fill="#363636" d="M270.38,88.54V29.65h19.52v7.14h-11.65v21.24h10.34v7.14h-10.34v16.24h11.65v7.14H270.38z"/>
- <path fill="#363636" d="M295.56,29.65h15.42c6.01,0,9.02,3.36,9.02,10.09v14.52c0,5.14-1.56,8.39-4.68,9.76l5.5,24.53h-7.46
- l-5.17-23.79h-4.76v23.79h-7.87V29.65z M303.43,58.03h5.17c2.35,0,3.53-1.42,3.53-4.27V41.05c0-2.84-1.18-4.27-3.53-4.27
- h-5.17V58.03z"/>
- <polygon fill="#363636" points="361.04,29.65 361.04,67.46 349.69,29.65 343.37,29.65 341.82,29.65 341.82,88.54
- 349.69,88.54 349.69,50.73 361.04,88.54 367.37,88.54 368.92,88.54 368.92,29.65 "/>
- <path fill="#363636" d="M388.03,65.17v-7.14H400v30.51h-15.42c-6.07,0-9.1-3.31-9.1-9.93V39.74c0-6.73,3.03-10.09,9.1-10.09
- h5.41c6.67,0,10.01,3.42,10.01,10.25v6.4h-7.87v-5.25c0-2.84-1.12-4.27-3.36-4.27h-1.97c-2.3,0-3.45,1.42-3.45,4.27v36.09
- c0,2.84,1.15,4.27,3.45,4.27h5.33V65.17H388.03z"/>
- <g>
- <polygon fill="#363636" points="334.44,29.65 326.56,29.65 326.56,42.92 334.44,36.1 "/>
- <polygon fill="#363636" points="326.56,45.42 326.56,88.54 334.44,88.54 334.44,38.6 "/>
- </g>
- </g>
- </g>
- </g>
- <g>
- <path fill="#363636" d="M156.68,2.76v20.03h-3.05V2.76h-2.92V0h8.89v2.76H156.68z"/>
- <path fill="#363636" d="M168.13,22.79v-9.05h-3.75v9.05h-3.05V0h3.05v10.98h3.75V0h3.05v22.79H168.13z"/>
- <path fill="#363636" d="M174.04,22.79V0h7.55v2.76h-4.51v8.22h4v2.76h-4v6.28h4.51v2.76H174.04z"/>
- </g>
- </g>
- </g>
-</switch>
-<i:pgf id="adobe_illustrator_pgf">
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
-/c/f/c2vfvPb77758Xf//bsf//G7v/r1b/7w73//47/87ifnu9/+7N+9/f1/+vkz97c//+vf/uH9
-iTnRj7/X//vV//NP3/sHvv3xH777377/7z73uN7+/O++/9U/feWv/qff/PDd337/+3/4/rd/ePUv
-Uh8H34+Y+Jnlf+6v/4/fnN/7T7/59R/+a/zh59vOnj/+7rtz8//z73/87R/yR34qm/Rv/sb/8v1v
-/st/jT8cP/cE/vb33/+333z/r9/93Y//+s//P7t+8+M//fMfu3Qe0Xmmv/n+n989oZ/t/e33//iH
-D3f64dX+1S/+h7/46/bdX/321/Gn/Hvw7+/+w4+//dsz5v5wht0vf+nmv/z+v5yzvTvwi//wO45s
-H/nL3//LP//XPM+f/Z+//e2vfvj+12/r3/3ievuL839//6+/kIrLv7z+X3mpq1xv/+v5j//3NP3r
-W3/7m7f/6/++3n7NX/3dL37ZhXrH4hLFly96RT+c5jO/EsC8b/72p83sh7AF/vanJ/mZ5tdJfvu6
-xv/9F+xQFznQjbsrbJBLwhoVMNa+ZL8ALhLIwgnWr4YeNv5mlEqUjJLtEIVELDFuJWgRv4Iw8l6c
-Rg3vOpx57e9/9eE+yeOcIPe5fbw91Eye+i0aUfFV48UGyI1gGd1YKM99EyfAp87NnY3Lt1//uW9/
-8Y86UF1uPE/wPrc3d1wHc22pbqbg++ZGtIriJ1me3IhFQPzgbnkdlLRH/GDBTyEa2aH47ohT3Vgg
-Wumn7nK/TgBSKK5gX3nTN05KfhJgtqMxzomO3vMcbhjG8cxqi54IN8fv12giVRn9Sn39+ZbvsB4L
-ULG4pPU0kiCIe/ID5/KHMi3RPNrIy+/P/RMw+ASv+//wBr7xqwH4SY1IB8QV+yGaUe6O5un3S+PK
-94Wa01ucIP96Pi0/PWX8FqWmki8B8X//Vm85HNVcdJKuzVd8dPe9X41XiUYCz2/yBGs9faNnJ/bz
-OREP/+rv54WdDas80jgB7M24sNOcjUjuRBO6qdF4Po1ovPywtpUgv8k/R6fDzdMPp0fNxY0nHnz7
-6u//0bczIOerWUJ1+X4EtYzefcbb6B7N9OXi/q1XBIrv1gFifkRpf8hmeB9uZscVjc/kIBtHGvGh
-HdGz93gUErqrOWGw5c+T7uwKYCQad37S7750EbajmXxEtuU0NnCA+uoN5KMk7VJykAwByKJZRVU3
-lzsepdjI8e7u4i+LxrnjFFIbjEZ0Yt1YFOR99edyLmTo5WC5oZP/EM3lyqENlu4tGgES+90xf0Uj
-EpR+d/fzhBgJObjRNou+F/YybqwxQemLyBFxCagRzX6dfB287eybH8HN6/jqLbxGD6oRPgWJ1Rw8
-E91It57FLlaL7tyHm+edr181GzfmhPzxtPlKgY6vuA5wZ/FKm+Ud3Nw9IdBISiJeU8u2UeMdrbvE
-dPKT5o0aVP597dE4Xif96QX4ygSEmho+S8IGXnjd3GPEK1WVjTm0ESt9Gmd8Wygw69KMvtJV6AT1
-6bvX82P13QneX0Fe2iuaIe1XdlxaQ0AqRhXFoSfIqXvE+8AG/C0br3gfkDU+N7ZYYb/yc/EdaMvU
-4oUoQv8hm0FARvPy/EjjKl9prCMb7xjGqhbP6Fsh9kXjyh/TN/PVK4hxpZkn5wRSkr40LectzrzQ
-InZjhAAabD3aRnw0fHUtxhXNI9dgpbHcWMbuP11lPl/A6wOTvapnR1bF/MJeU+OIT6Y+MQyWCdn4
-zM1Mojm11tqfuf3KuR1qb3a986Qffv31wD7c8A9fafYk+qFxjLf/nM98zRg+5ZmH9UMtJ7B+Pc/3
-ynVORMKfeei6OMA3NRdXrSg/ZDOFLz/j5rcpbFCPMTWWn4U28Veu49Dyv/lFNteWfT0oh4zP8qzd
-4d/nK8i4g2ln5ky1WwZEzKo91wLgzN9G854lTrNx8YnGmp8GgkZvXz1vPgvRvOu73j9Ec8YISiT5
-VrDJeyY3vi83jvaceeRqJ0rpPZ5Le/rWZx7dr8ZScx72lBk/xnwY520tr6DnZ7BZy796C3lvUp9a
-737uh2y+XotV01NDGujOJULbgWhc+RSkS/tNnECYhGiuM/vWJ+TEISYaAaRGYyvPCT5cmKdAWzRc
-EasonvghmstVYrOhuDAaW4sPel2KoNToyYP0bYmRqeaaMRBG6tG3x4Igc8n69tUreB8H5s8puM6J
-RrvAJ7qLtrreR2w/M1VEc8tNJgW67OvIRSd45pqfiwNX3nGH0ZKNMwJBURK+egevb0DBplfGe/Xn
-G9h9ZjObsW+jOdb9JfPzHJjzyvyBTvHV88YPbgG84lZ23TEw93y3T91sHr/N5quvd68kThHnptFh
-0efz5h2itHF9vkMlz2O3mluqsd4F1jdcEzfKxc6N17uBLICmm+vIE0gLME7wfF/1ytd/o4v6zdcv
-7PUlCCkeAzkWkI/jWwvIVwb9f/63+/7kvP/x/KByNP/jv+iveJPe2Ee5/4doPitTyea939yI/Unc
-lCcNKWkIfOnvMnbmks/oPZ618L/ui0RAPpU72q6645ewzHv+HoxwPCkvRDSOcxPxW81x12kEOx6N
-PR61mntmLPY1e/YteQKNmGgc+U3eV2zZaH59VIj6x/McNfeB6IBEY71KxgqOVuLZrycEAbQRjTOH
-0Nijfv0t5QlqKflZe461KYyb6uvX84/L9W4OfM1s1337YVfv5ZwvWXVHY2RhOEHp+evV28FX6isa
-M7N09ZyYL28gadzPH2/VBZzEGv62bZmT16q1MU4wZwxcCumfGseoz2ljE6O8253X1GaLO1Xk5Eac
-G+Kk4/lzYHf58GNhgUOT64JGUp4zB5VSF6/fv5/N9ZzPbfXna1FMFI9qt2eqv7NRksqvnnneeuVm
-pSxNQrqFnuNy33GzGGlkJu3OdYXmd+PyijujvLVzySzPCcbM6VVcF5/gemZ/6PTxafETd1xW2/Fo
-CFRLfi7sM/MEZ5/zrM9jRt9KIdlvYTnBhzwLLisZmtfnBFdrOe8zJWs5uLXtyp+LOQ==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- +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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
-duvPS6mjb1imvS0puK2xyfvxrganNxeRLjxT6fT2cin3y4PCta8OVkS2V9TX3UuorrqXXO/3qKWR
-f3elkH5+P9Hz+d7a5Pa8upQHOdU19xLKdt6OKYHP3lsxpd+heTp9Pbrs1OX46uOX4yr2Xo0rq76W
-Uu71dFs5+/FRLvO0PU1/53Y6c/aJD3f1Xjh75WE4d+NONKyNssvpSK5zKrJvZFcm3yiqTrhdVN1w
-OaUq90ZOPfnidYLdD50O9m2dXh5IP+Vfz6qtvphWueliSkXM/XIkXw0NRTczG7zQsxHvP8SvutC5
-yuaHzlXajt/8oW+ftj0bCm/nbcu7k7/N7/GuZrcXByvphzcimRvXg5LvFW2BeYLP6VtRpTvvxJZu
-upFQuu9udOnFh+HFGx7GVrq/2ltF/P4q0fZ1p6fd2//nY/9bZ6jutx/jnd4dLYi9XVqdeyuzqvZq
-cvmWiynl0bfKK/0fNJYHPGiq9OpoLdO/Pl/g8up4Gf+6rZB/1pbHdzzOZo78vpbY+e8VzInfXV3a
-r5UHtLds8O1orXN/trdqzZuT5WtfH69kPj7N1L3+WwT15lUS++vtfPfnuytc3h4psw==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- DAr67rhfAz5HUS83MMGPVoLPIvhEY96GuBJoH4K3EJ1Utxvx9U3sydAJuL8vOvlPvs6G3V0NnknQ
-fwOcDnMVMNAgX4f54jIG9O7x+hoaR4gTU7eM+WLXmNmYr5sjvg4+E2hscd/ZJ2sh5svw3Fmn8cKA
-K0uxXhL0mbDHRPYiYWqFpii71lh4s4lkMjt1BElvt2GPiSPonh9AWNwS4RyRtSIlPq04qKWKuD/K
-YTA34T2AZwDwdcBUwB+hBmDNJdC/gn4G9JNQPAiDH64SBVxbJnaXzxZhvh6C+TpoyMJ7xHwdeojA
-J4DnQQ5FeRh8FWn5y43ghwa9dehTYq6GcCnm6qDRB70G9/jZDHgooVxIJZVvB686KqVZFWGSQY8J
-hMlgnuKe7THXMaT0IPaYEP2LxwR4rLOul38xIRFXNiIJ2vzUT48Jn3EiG5SHHcKUwWNCZG0/BuYO
-9i9xTf8FMDFlBnlt0GNClFCjLkxu0oDrA81xqKGMJfr7NoGTQccMNLUgr4JfCRWPOHbwPdxzxZp0
-fjmLyaSqnWRW717w/QWfaTFgIrhnXtcWSz2SVCTWnuMhNgHbYM1D+dstTHK5KhP/bgfWtYTrBF3M
-qIcbWOwvmayCtUFTaveKs+pN4N7Q8lcbcXz6X18CazSs380lWLst+Pkq1i1bhTrpPdYE1kfJIwqQ
-X8Xu6SowjlCToK9BH3UcCRq1pLndMFhbGPT9CFfC693BD9fh9wb9h7MIh6PcJUa5HfIi1nJD8Yc9
-FKFvBPp5KKbAFwy0bbHHhG+yyj89JgLAYyJ4UO8f6j/kF4cEzP/AY4JFXBSwuYmhFGMgqDMwH6E2
-MIh7gt4qxBrOk+eCp+B1OuD2R+3xfMI9dNe42azPtYVs4L3lg/kL/X3Q5gPM6BCsBFppsH6AOTTi
-RoAJ8FesZ3h7BcxZnEshd0L9B4yAeLkUYRus9Y9eA36Ofx+vJSbMAQ1WNuT5GtyPOO4yBvA89mk4
-5TtRegzNgcMnhmHehj0mouYw2fX6uH5cAI8JCWFsLCZwTMF6jhVoiTuMApwC/k0/PSZmgMcEXJv0
-L48JS8eRgzqZzzZKvK4tESHswtpBjxRxIuh5embNx/4uQTnLwduMTizZwUTcXwMeKPC7oKfMBjxY
-TsZWbQEfqkH97OQ50K/CawyAuxFehzUzyFESbzS/Uc6E3izWtgNfZXNbvOYGniLCSw06VNp7dQZx
-W6xHi/AQ6IBCTgGPDdgrAX0i4PzMSb9xuP8A3yM+LDh4YZgR33KIriYNPU8F8NimjjiMAJ8J2AfA
-R3OXRnMevCChnwR7FgBHgSck+B0AJ4IeA3p+OGgFAwfCaxzQv0SYiomv2CkKfLwa+xmge0YnlOwg
-LzWrkwll2/jpTbsAp0Hv0hjhbUNtHewxIUBcnU/902NCBXIDrF0ZGkkIE30Rjk/4W9grCvqSludw
-bwbWziE2Ma8Gfc3D50ZAD0sE/B7lG+ijgPYe8BDQs5X4ZS8BHVa8Vn58sNcluXhpMda/vhA2bVC3
-+NxIjAfQHAPPIeh/ik6i+EVxKTnpMx73z6C2htzF3iq4b396cG8FC3kK/FFQrYe+M/ZRvxA0mTxg
-PRT2hmAPijMe/+ExkVqlIUqv1qEdYpX/8pgQSM8q4piBPqRD8DTA9+AxAWMgdv1XjwnPQY8JVOOw
-RwSKG6kt4kCH7EcyB08Px/0Ft5S5wB2xjwGaR9B/x/jX6/pCHHcn/cdDHgHvVTK1S41O7VCnI16t
-w/1+G58J1OXOvTBPWRu3cbD+BPNXjPNQpDL2u0G1lbE6NxL28ACnBm838M4CvXEqvVoNa6qDRipw
-IeqwgpGxEWGob0wg3j8EeA6sDwAfBu5HnQocD3kR/Ej3adPE3u16xJ5d+wjwZIVeK/8IeIPFKoEP
-MPTNYA0L/h3AwFirFvgrqpnQLwQfPOzpAb1A4OXgAwoeD6hmAiaHugGcF/Qv4b5gndBLLRqCG706
-aE5tAo9t8Jgw0gF9cdMh8ODTLAGejsD/QdMae0zo0oS+HkWwhx1HSsHLA+Vr3J88fGEkjDde17A4
-MQx/tbQeBvdKdAzVH/DFPek4hjp0DuchjC0iH20Sxb3aifMiYE7odYLnV+ST9Yz85WbAmaC7CGMK
-uYGWP1o/qF8aOh2vo3omqMA6KtZ7jLy/js2s1wVdf8jbsIYitUW53Dd1oSi9Yp8ks4EvvtxuRF/q
-0CITKrdijwk0T1j/a4vJ+DzsMUHHlWzDHhOIP8N+Cz1DU8JQdFIBfJbAdxD6UNhn2zthHni3YI8J
-90GPCfG/ekxY/+UxYTOcNjuiSImOKmC8C2vCqM7TcaU72JjCbSzCnbhnEHBtKeQRzDnto5XF3jeX
-MKnte9nL3bpUWr869KVFHlcXCJ0SZ9FZHVrg34Y5L2hpA1+C/WHogb03T3tNxPsi7CKmAS+H/hFw
-deC/4AkK+A96aGLLCyMlJ30ngAcWrH2CXi0dVbyJdb48mzzuMwZ04amzYRMhPnniIwramkaEuoY2
-oaNtQhixR/F6KOBOOqVaFfRrQQ8delh8CvyMTg3HfCLkwXrY8wUxSh+2Gc4iLg3XLk4t1WYi8zeJ
-UW3DvXe74Kl4/Q/2criCDmy6CplStYvNaNfBHhNhuSshZsh/ekzY/vSYODtSgj0mbqwGjX7xWd9J
-0Fvjo/lEwd4ThDUlTrGzJLAXCnDjoQsjoNfGIyUEs//YUPH5sGlY2x72XHhdWgi5CuIV5yHQU415
-sU0YmbdF6paqAuMJ/XfwooCcIvZJng8ayYLYx2uZa81GwstNejC+4FWFc218qaoku5wnTKnYy8pf
-bIbcwGTX6YKmM/Qu8X4Q0EcNyFkGPAD4N6zZ/eUxwWCPidrdwktduqKsViMqu0+bvNyoxl7MWghr
-PNRh5xGCw7bDyaOeo/7ymKATGneKES+DPCUBP4iQG6slHuGzcX1HtUwYdn2lMOLpRnHAzRUYBwMe
-QLUD7+1B+R7Gik4s3ClMqtBgU0s16NQyNRhf6D3TkfnrYe1GBH7Z3jcWk4n1O6iIgrXMxdzFdMjT
-lThHBd5dBh6WTMDVxYDpMDaHdQjA++C/4Jm5kI0t3ckmVqoB56Ht5UrAG2C9HngPnh+A5WHfHooJ
-ofz5VlFKzT4mu01PcqfaXHK9WUgHP1lB2yUq0zbhk8nTgeNhDYJvYT3UhDEbYoLiFDgIg3AAmi/z
-Ia8J0fyGXhSsFxnpUgT8HvZpQbhQ4n9vtdT78iKMZ84ETIL9GuBLIUoq0xCG5W3A+xlgzQ58S3+u
-9YJXJ/ivwviQsfmbmKhH68BjQmwXg3sQ0AOAPUdSr9h5kovpiyRBuWtgT8cgpkmZg3vv0Ac65zsJ
-99id5DOBj+MeBmjunvWegNd4bH0nQx8ceiuS+CpNUWzRrkHOjuq3PezvuLVc4pOxCHr22K8Sr0MH
-ToYeAHhCsiE5y5irNQbC51UHpI9LrcATUk9bnwBPYbyXLa1kr+RSjaHwcrUumZy3FXtCgge3rHAz
-aO2D9jVejwC/KoQRoP8/6IuBOJt9uBKsi5KxiJsiHC6+1kCRl9vUwWMCfM0Zr/S5g+sTGXOoM6ET
-wXud8X+2HHtM2AVPwTwqKHMp9LzEnglzsceE16DHhEj+cDP4SGANfoT9JTaID7inqmA/N8RTsUYx
-ep1NqVRn02o0MT9JbVKHNRPwAQKfPCry//DJm/1Pn7z0Tk3Y92PIowe1yPE+g6S5ItjXAH8ftNbj
-ytVEaY3adHjBOrgPEDt4TQi8emAtFTg69NKgHiKOJLpRQ5k/fnVS8rDqAC/ngzrMBTr0xWrGNlkZ
-tPSBawJfwuvAZ4In4lzsmjQHtNnptBYNiHddhAd19+pjv1KeCNV3VOfFJ5zGSKGOgCeplc0IyO+S
-00F4X7HIM3I21leGtSPYWwZ7flBdFII2c8D9FRK3S/NgTQjwL/Z1gzVKWF9BYwl7xSDnAD4APz7x
-Kc8JuNd/2HmUyCYK8eirC0VhjzdA/sPeDeBx7gQeZIi/BuVi7WeIXdYuAPfVoW8iTazfB373QufE
-WcBJoBcF+31ML4Qpm51ymyB2CFTCmvo/PSFhbMmspr3SByUHzfLf2DF3WgSwTmWgKyCgNmG+Br0d
-8IQMvrscfG7p9DZN8O2kUxpU2aj8zSK/28tE3lkLsEcvrPnbRypDj4456TUOr8H+i8cEhfgrXhfy
-SpoLfujAJwTxJVvAp4467jmaPHZxDIqR2Yz3rUXgL4296j0TEVeJ+UX4l8cE1AnYjxd2cxUd83wT
-1GyJd/YiwH5/9Vcxp/XPXMwkFquKkyq1RMmVe+mM2n/65NF/+eTlNJn8V5+8OnXwyYN9mHiOQf8I
-xSLWmw++ugx7SaH6D/sOwdMI+y55X1sAewTAj5B1lCnj+A9+ulrolDIL4gLyAXAz5lKzNht4dQn2
-hPS6Nh/8pynb6KmUU+Q06LXAXhjaPnoa/6DNMFgzE6JaDjhKlNGoJ0RYEXpPpPCQAuyHBdyHPSBR
-nQN/NPBKhn4ma4WwB/TjISZtBveq4R44eImGPliF+xQoX4DHqtA5cnDPB/AUwOyIZ+A9urCXMSh3
-FXgY4P1BsN4A6yj7zw+DdSpY34O1IehRwF4FsWeKCt5XDn4QsAYH3mP+CEddCJlCHz87Au+RQfUQ
-eA3WPYccApwRHk7xs8BLDnq1EnfZHHHA1eWwv5cBT0jAzBCrGVW64KcquNSuivconPAcC3sMYY8K
-7jsmVGyHnglo2uPcDpwY5tfFa0vwnj/I+8Bng8ELA3EP2LviGjsbz1XwqQy/vxp8l0UeaYPX5J4x
-j4m4s5pMr9pNJpRsof2uL6LtoqfBnohBfyP0M/Z/erERexE5hSuDFj/+t8GfB/ozAbeXUbEvN5Hy
-F+tw3wQ8qU76jYc+MvatDLy3EvzFJf7XluM9fbAPHPYuwtzxvbmIyujeK8zsNRB631uC99eAHxfg
-Mt/sRYgzrANfGKy/DzkY8Qo0FzcBfsFzA9ZRgVMC73aIUYYH3tMfgfANYF3w1HFJnAXrnrDmxxyy
-x3Ufxpg+dmEk3tvqnDIb1miB+1BnwUtZrkSfujgOvMCBJ4FnKXkUYWm3LBVhaNFGwB1Cp/TZuDaf
-9BiH1+MlxxQxDjvhMEaM6iHWl8f7JTxxvxf/HeCt0Ev1vbEE843g3BXYC8Ud9oGj8feDvVaozgK/
-AW8eFB/ikPvrRIG5q2BsYc0a1uqxFwX0MWH9EvqFsMcX+vyemfNxXwjWTFHuxWv50MOC/w/hDPbC
-xUk4j4LnEqw1Q4yGPViL/Qegnw7rXF5pC7DfGeTr8McbRRH31gGPG+wnxs8FX3km+70umd6kCp6Q
-wnMhk5mTzmPgPSMcswt8ZIVQ086FT8XXCteDuAHELuQX6G1TKJ+SqZWq0FfB1+SK3hv4yYei+Il8
-vhH7aofcW4meWwacDfaHgd8NfallL5nVogG9UMbr8lzWM0MF9llBr4dMLNsmDH65Dg==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- QLlEwJjuPhlpcxJWJ8YhLiarVwntCzGhuAIhIM2PjxOegTZm7zuTOgPnknviIqRHgNhForD8TSyX
-GebQlLmdIsurCi3cIg65swlxuZBmFWVzajzi1FEJ7/YJQ279jPiGP/QN3aeKz1yeifS6kb4GkVK+
-n8qs00C5GWKGsrrZHnGLEAdTdLdVJH1Sf0x0p5kiEsv2ojmMtAlw2JdINxUxU0mnqDmkrf8UzPK8
-ItLKoO2jWI1NZGNoXvJoczn8mON4VkvIN305edZ/Ot8U5ifQ3yH2LwlrPTaWO0QoIda72Dt3Fas3
-45OwGOk+sZquqP2wbkGsdKTVJYAxAultkWevzCAvRCmxGgaeqUvEl26vZ3lSaJ0z+sEWYWattvh6
-I0+U1qBNyZ5uR3YphAc6Z47iORlftJdKq1RD9aAou4uDZ7ap0K6JsJ+i5iBNGSyldR+e80kbMScE
-qR37iMu5K4TuSYvQb9PT1IbziQLkcb8p+DHPScaik/K4teN4/ATqCwdFPS4Nax4NsGftLrBv026g
-pYa4nOZyPLMTCoRD5Gzyyq3VpH3ILMSJRyxVVkfYIWC22DUCaffNQnrmXI4IIO4Tq8+G+FTQv6Lr
-UVDMQ2whOr1eA7GYWd90xnUqllq9n+X/vBgyIx9/FOFJ3fuR5hhpFzQdzg15A1h7GRkTANkgkdWp
-gUW/2oz8pI4OBnR1uQDpXbFj4BA6B+lOsTpOSJNZaiaPeMfGuBgIhObyiOXNMqJPuUyl7S5Mws3O
-K7JMeegP6aSSg5KU1+rC8EdbkF2T1ucUER+MiivdR6WWqyDuF+0WOo/NteJL9hLpFQeRDoPEM3KR
-2DdtBdIBkATlb0SsQyKxZJ84p4FPZPfpkGcvTcfMT4xjdc79k1eKwnJ/RrqDVPaQPpk7ZMDG+qx2
-NZbF5H9jNWXjP5k67j4Zh/OPD8cDcaXpkCebiKTWg8LIqj2IFYd01NCYobU0xCairr/XYTVPob+h
-XFMWUu7pi9h8PfT5Zjq5U1WY3q0jSW83lKQ3G5JpNYeRFqLIMWQO7ZOxDLEMEUcPXc+A+MakZ9YS
-NucIfPATFVO+W5j6XlOY2a0vyWzgmmbV8UVX6w0QPxHO5c0i78SlEo+IhaLIwu1Uerm6MKVKA9rm
-HjYng7kN6X9tBYx1G1ie3smA6UgTk0htPURljxjQuUNGaN0CrZMiHjTpn7GMjftnoJ++fGMNWp8h
-3fOWYicvTyHso2bjdsHT8KNO47mUmZzaIU1w8IAKQOeEOPgROaTljlhgZFqbKuL4sn0E61oenwKE
-la0i0qgQR77cw2qgnQ+ezWrTwnmO+kKcVWtIxb7bK/SIXYg48vQ53+nseqdPMsy7PKeLTjlNhs+X
-sry+u8Nc8v4Qwb/xSYN0Dp+DmIxc0TEY237oHJLng2ciTjp1OX8d8g1IOxFx6Wnrk4ombjGLpR6p
-y6UesUtQDUaYIz9uImdgaAQw2lQO8RhR3ES8LcTiRrxhwuq0IsufvJy7RhT35gCdUH4Q6bIi5iir
-AY/YrzAfpAPSVyGWpiDl9S76bhsuzm7kCRGLW3pcgdW0geNimltJibLq9KFf3U9mNWvSN5t4VNiD
-nwl7n2mI4U+d85mOtI7RI3XKfQrKzdHaA+1zdTliPqN4gjhjpG/eCupi5kLM+uJ4pLEHY8ZMxOUj
-MgbVqNjGfdCGlqPaT+icuohl12U1a2BpdftRzYs0s9C6GLsO55e9Atm8JKVJG7HeqIwOdSqp5jDS
-PhAedZmIdP2Q1gyZVq2CZTUdQpxQtCbC+l/Uz5durCJTOg5L0lr0yIz3mvD7Goj7IL0YokxbnFVE
-8x6tOYnDC7eRGbVq4ux6nkl2AylKrdMiEiv2Ic1WOrJgE2Ld0b43V7G6V5fubRBl9RkIc9/zyKsf
-tfCM7sO0/9017PrxpdxVLN8ur4srLayxEt9rMyHCizaz5zHORMzE7S5PRbWuMawBke46lz4qhziI
-9HmZkhD++yxHEmnGQLvjU0fkDXUFLO8YaasgfqEkuHCr1O/aWvp80CyRXeBMkUvCAiqlUUWcXq9L
-Rb7bKXYOV2ZZyCi+It71Wa/pSOOM/lM7C4+Dedmdbp74YbMly1TzSlvyl3YWyqMI8VnoD20VaDvE
-FE1URu2VuKUulVyIVEYMVKlb3BLEg0WxltXcgPEWcfFZLTwn/1nCqHd7xMmN2iZJ9fqihCpVVsv7
-tP90qXPMQklg4Wak8WVyDmlsXJjE6mDD3yVx/MHipsJzN9C3m3ii17U20pflpxCLW09NH3AMiR8s
-7swqbcn1GmPRtUYjPKP0AMviRjVlersKrKG3I+YgqkfEZz2n4+Ywt4L5L6u9COsMAsYbxKaX+Gau
-RrEe8QLJKwVrCdvAqQILB0VU9yD9EpF33gqR540VrMblpRvrUK6AmEVsHhFW8BPqQ2RbAvqkPNLl
-Q/YvTm7Qkqa06YkDHmxE+S9GW8kZE2ZyJIobSPMKaTXAuExGFrJ1j/Bc2GzEuIT9PR7pGopTYH8l
-txmIA55sRhx1dA4JxTFcaCNPmZ1WFJ/zmcEyOGOf7pKkNuqZpNdyEHMXcZ6R3hGeBf1ZTPlOVhfB
-NXURYgcTKV2HiMh320j/+2vJ0FewpspfTwUWbMCvtapKnlRZW7x4YS95WnWUf3NMg4h4sZkMK9lC
-XUxhfSzSnEPn6Siv1CVoXQ/pIyD+HdLuoDK7NJHuiZ6WPtDRgn6VT8M81FTuL705iZ33dNL6lCKK
-i6xu1ungWUgrBa2/sxoGNi6T0LwTn/OcIQyBcRAxVhGXm9XOgv4ro15HlNvIRww+Kvu9PpYO8xik
-nXXUZ7LAwn4c0pbF6BMKGHVcHvG4Jad8p0tsPKcgjROWKWvuMJ5mmbaeU1mm8pXs1ULE50YaEA7+
-M5EON9KZkaY1GSGNFVbb2M5/Oqtb6HN9tYl98FzTk+7TkaaK6Erm6r9Y3KKA62vx3C4d6eOyI6bl
-r93o+10kshl9TR74odMUPx/pArEs7sDb61g9bOQHrnboCPPaeCbXWgR0xnstCsZoVjsLxmxWZ8gl
-YSHSzsIklqx2lviftLOwvA8aqD5E57c4hjibK/3QzvJjtQJYbZtz7tOQNgWrDc9yabOWIv4zsr2/
-tLPESS2awrQOTdaO4RznU7byGLQtpDWPviNGWg0XQ+eifFrknb4M/Sb6iPsk2splAtKXlyQ2agrT
-u7SR7gFxBH3/hLyAspRj9VuQZnhAzlrkY1gOYkjez3T0052i1HotxNWlM7t0EOORTGlTgTGP5c7j
-kf8Hd37Rf3Dns/q0JYUdFhYlrzzE15u5VMjtDey6IdJ58L2+jLCPnM2uK4YUbiRjX+9Ca+F8q/Pj
-EOtYCPNyFNclmc1cNOboeiuUc7J6xUgHF2kiiq3lBWJLNtdj2dxHT49HukisXg3Sg7Y8N15kC+3m
-QugcxD4XXe8wYrWz/GDf/qWdFYS0s2B+Z+c5TewVtxgxYyXOMO79qZ1FnfCbwod5sJEmBgjaUp6S
-wP+XibkCbWGriFjLlBTa5jFkr8GzWX08GMfYNZFz/jNwm2PjkD4TYnqz3OvYl7tYFjfS2YJxGh0m
-py7NRHp1Ji4RC8VXctcLo4v20ojFHZi7Dulfia83cFGOjM5lkS4wZzrpO0Vo84PFzeoPJdbuZzmz
-SPMZca7R7w69uwkxa9H1aKx+r+3FST/WgZ1YjQ/pcY+pSDtKfMplyg/trKglVE6zAVofpB2QdpYU
-8LhIz8RhAtLpQufdkF4YikNi2wuT/9TOmo+0s1he6V/aWVYuE6WuaUtFES92Sr3z1ophPGM5/Me8
-JrO6Xc6JC1kNRefAOUjHUuIpW4JY+hIX6AvhuIpsfKaw9h3xcjf6PoyHM3583/PH910zliBmNbJv
-6hS01QuXZkmuZK01Sa3SN0uu57B1U2b9f3Dnib+48zfa+f+dO9+ijrjz0sfo2osuEYppSENT7Jq8
-WOSZtQw7cmE8WpPAjl2cQJ8PnY1iPNLN4uDmclzCVA5DOmo+N1YJI6v3ojxX6Jy+EMU/pO1HWF4c
-LyBN5fh8EYB2Mo7VYT3rO4PVYnfwmyX2iF8icYj4odeG5vyVgp/IzDZNpEuE1hcFMO9B2jJI55xr
-gAFDLV1WO0tAi+Uw8j+0s1agNSIUE7kcKeBo8WF8sZZH8Uli5TRRcsR5ksTGcZLI6vwEobXTROSj
-kRY3q0/tHr1Q7Bm/BPlP6pTTJBTvWb0L2Ld03Ks9/x977xkV1bZtjS5ADChmUbe6xZxz2rqDOaHk
-qlqxCpAkSYKC5JxzpsgZETDnnLOiSBCVZMbsjifdc3mzT/TcfcNr77utfe+fy1YCRVG11ppjjtHH
-mHP0Do0fyk/vmTAYuFUiWJ/4gemS+uwSMfXQLDHx4HSq2RZVMJbd3bQOe29QKwUXN++VMpgl7wl9
-M764aSUwKWqAokOIjuQc3Bf7Rqg2VmTFONRbqPZvcMUY1jNugNzatQfVciIxk8bIL9pZpU2rhIoH
-G1BL+aKdhXgreqYNgT0L/klDoVcG7SzoJSM3+w/trPBu7SwVyfctnXsgvqi8UoYJNl49MXfB4S9t
-Tx4MDASfqwzP+5bqmfmpR6oC00YSHzgCsUOw9u1FtbfI31vsTNXD34Nv/c9/jzxeiiodD85tqtkH
-rKG+ulRZcnW1Rcy+6WJAsh54n6H3TLVgYw9NZne/XSdUvzYGjyy0Y6GNR/+exE7UANj88wvFuN2T
-u3XXPXpAKxH6A6gHYs3LUC4wxoKtpqG5yJjwdhrIHVHPNjKXGGhi88RncOnX5gFLCq4xuqYmVozh
-ZpbZbGTGsCp7LaV/op4qsmgcdNCRl1NtU8SdmINTUTugWrAxByaBwx57CpCzyve/3shnXl4AvXlo
-ZxlhryRvoQntLBnLMyy0s4iNwz9R7ayN5PPIA9rvSs/EIZJX+EALZ5++lg4RutBoFGzcenI2rtri
-NhI/od1FfLIQv2siNBChoUZr59A1K2z4iS+s/RH6rqJ3lp4qpFwfGhVC2f21wPlY5wCmAjc31SeM
-Kx7PljWsRGyhGgkxBHeEFo3mvck1Qpejop7grbpVqiD1aKVTSF9Ln6yRFgEkr0+onqqsrpep9jWL
-YlWHiQLcyQWNS6h2FtVv3zdZXnCdamdx+feWUe2soHxoZ2ltwlyUXDX5kN1jwNVNtanjaqh2lhL6
-ydDOCu/WzlL+WTvL9Yt2llcv1sJBS86R3FIiuB2YF9rxIUVjwO8N/Q1gEmiBKXfGkPmZNQraCvTv
-Sd4h2JO/t3TUkitsNKBLBcxAdX/w90knZtAHNDUILunmOa6aKJF7KbqE9KX6ZA6evaD5LQbkjVRk
-X1/A7X21SVba+j30D+WW9lrYX64gD+RqNE9w8eytsLLW2rxRZMwUJCe3DeyF1xiZyBlz1RZNwS95
-KOqIiD/I3/C+qGFAd1puQ/BPYO5IPvnYdOhVQJt70zoZs2mjjAHe5hx2En+cMVJKqA==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- Qo/23aVu7XtKXNoPlipfPEhga392Mrv3b0pZ898d5I3/dDS+1WVieKlrnXHFq0Umuz8uE+888dry
-ujbHpvNSDtfxOoCrfbmNu/fMneBnB6myzYTb+3yzeLxZJdyp97BsuZrg8PRwgc2zs9mOT48Xe7ZV
-7PJvVedHP0jMDnycmpXSGJ1VVR+qPvwwMOvaQ5/0utadqbeb/DJuNPhn3Gv2SWt84JNWR36ub/TN
-uHcvIPNkXVBWVV1YdkpdfL5bS0WexbsraeL75kTrV2fV8kf/cDc/22WmOP7v5tzh38y5U29E8fSL
-LcKejyZc2a9rpT0vWe7Yb6xQ98JL+aYtRXjZEc2/fB6pfPcwXfpUn86+fx0u/PwsQfXuXoblm0Y1
-1/Ey0PzCX83l55/LxevNzqq2u7HKd01plu9uqcObU0uTHseV72iv3m3z8kKO8s3teNvOC3lbXx0p
-sH91MNe3Iysv7UFkztGmQPXth74ZN1p80q+0+qTfJF+vPfJNv/bQN/18U0DWCTLvyhvDcnbdD8sp
-rQ/PiW5MylN9up5qXNclmGTcm2a+p2ulcOy9KJ18t0V57JW1dLPdw/JebYRly+1kq2e1WeKtVndZ
-zfvV8sq3q6WaNpl0+qmt8marl3SDxOTLv1grmx9GJTUkloc8UJdbPbmtFq49cZLv/6uBefHjJbI9
-v6zjzr4RhbbWcM/W0jLnJwdLLN/cJr7wWq7l29os6dfHaTadJ3L82nKKix6G5uc9jCh266guVb67
-m8a/eBTm8OJIYURbclHk48T8goeh6gNNgZl4HGkMzDpDxuny/QD1pdqQ/PO1wTlH7gWr8+sisx2f
-7c0WP3YkCc/aolUPmmKE609dpHsPfcS7LT5S/YMAzA11bQyx68SchPqE3Ij69PzQpvT8ktrIvKT6
-xGL25etQ06td5matXY5biX9KuR9fmH87OnfX7cicwEfZxL5KStIb4kocybkp3n8IMbzVZWh8tctQ
-1v67O97bpfVweVpT8t7kByl73Z4crLR7eSKXb6n3E+rv74h4mF6FccLjcqN/1oEHQVm76kOzjjYH
-ZN1u8ckobwnKte88kqf4ozPM5HWXg+nbf3cx+71rp/z3TyGW786mBjVl5Sc1xuUV3ovIrrodmR3Q
-mJ3r/rg02+NxWa5je41a9fpmqnXnebXydWua8nlrsrL9SYJw+g8bxYF/bhIu/GFr3VaX7dFWXe7a
-XlNk//xI3pY3F7NtXp/PFT4+i5O//osv96YzXPytKcX+xaEc67en1abPupxM2z/Ys88f+Nu/OJYf
-9jhrj8WjazHGV7o2GVX/tsgo8exYI9+SwcZBJUONStvmmdb/TVS8eRnk9HJPfnprRH7Bg/Acu1cH
-1aZ/6dph+LLLYvPrLmnTuy7lprddgsG7Ls7wQ5e16a9dHqZ/7/Lkf2uK4n9vipL/8kuwYUeXtDm7
-bYrJ8a71ilt/t5Fq2/0sHzTFO3YcLQ56kF2WXR9bXHU/PN+vNb9c2dmYJDxuDeUfPfMXHzWGKd+0
-pHq0VJaENGUV+zXmFx24EZFz+lZIls/jAuKzL+Sr3tVnWnfeyLV7dSLPq72kPPFRQnloc2ax89Pq
-PO6vr2LYFy+ChM5W4jvrM+06T+a5PK0p8GrPz897HJ4f/SixSPjUnqB49XOA4sVv/mYPu6yNbncZ
-bTr2Yenm9PwRm1L3jt5Y27XS7OXv28Q/GlNiGxLzKmrD1STuqQ/cDldH1yVlubRVZtm92J/FvXsf
-yT9+7cdd+WRL4rg93/oi2OHZkcLIBynFR2+Gqi/fDcw6cTMs5/CtMPK3Yepzt0LUu+5E5tq+JDH2
-7e1MxNeEhsT8c3eC1ddrAzNqiM+61+ib9qFtZ8pH8rhNfF3ko8Q82d8+hmzs6DIz/b3L0/7lwZzd
-LcF5t9u808+2+KtPtPhnp7ZFl4q/308Wf29MQjy0+nBTbf7uL16bLnStMApMHbB+q5vWGssdmj+a
-S8x3qwyYhct+YhYvXcXMX7ySmbvwR2bW4hXM3MXGzHJ5kMbagLOD1lb/27R1j7rWKX55FhJcl5G1
-63JszoGrkdmZNxJy8q/F51TciFSnX0/KjSHYwbW1Ol948zre4lVD5tanR/IJLipMr4svKr8Vnb/r
-bnjOXoIbcuuj8oHzzFv/6WTx8VrGrobQnMvEv51v9ck4/MQn/fAzn0z+7y1xhns/LTL2UQ9cvUlk
-ZozWZ8b30GPGMnrMaGYI8w156JPvp/f+hpnzzSRm1SqR2SgFaK5XhWst+4FlJg8azYxiRpJXjWR0
-tfSYgZrfMCN66DOje09m9IfMZsaPXshMm7acWWTixqyKaxi24WLX94ZNXYLs5T88Fbe6bIRbP7tZ
-vrijrrkVmXfjVlDmrdqgzOt1/hnn7gRlldSH5+bWRefHNiYVhzemFZXcis47RMc0XF1wJyYv825s
-7pY359TyF394s2/fhAW0ZuQ1t3mnPe7YmUrmUKH872/DDVq6jDfs/WP2hqD9gw18KwcaBh/V25R8
-R99g7y9zN5745yKDU13LDPIeTV5h5sBM1J/DjB8xgdHXm0iuYRijy/Rl+jF9GB3yGEB+Gs4MZfS1
-hjETh+gzc5aYMj9ZZmit8L7Qb2XhhzHr2rrWm/zStc3sjy5fi3cX08Q3rxKF1g8RYltntNT5LMnh
-+cG8mKbkgsJb0dkV1yPV+25GqIlfzK66EZVzpjZYffVuYObu2vBs4o/VF26GqK/eCMm8cTcos/x+
-eE52Q3RBe7tXctcrt/RfnvqW/PF2e5Lzi7JMo792Oa252bVodeTVIT9Kvhrzlq1mpkzWZ2bOmsqs
-tXLX3Bi1R88gomroWgc/rUlj9ZmBTH+mN9OL0WZ60H/a5Lq0yD8NRvPzzz3IM/3IVeuQV/UkP2nR
-5/qRf9/qTmPmzheZ7xWJmmsOd80Q3t6OUF9KUudfSMxWX49X516Pz869E5OdfyM2Z9eNqOzd1yOz
-j14Lz754PVR98npo1pkrYVlHyNw8XBuqPn47JPtWXUBmXGNSIf/ri3jh58fx8j8+he3syM270k5i
-8JOd6bltIbkbXnUZ/WjhyEwdOZXY4WBy/ji3XuSsNOlVYGz6kgfOVIP5jwO//6+HJr0avBJ3QJfp
-pTGIfO3P9NTsT34axowYNJOZvciGWRPdpGf2nsSND13BxEfZSm/bk5w69uXXXIvMvnE9JLPqVkR2
-zZ3wbOJjMi/dDsqIbEjJt3p9Nj3qfmoBbPP0zeCsI3dC1Pm1UdlOT6uzhT86kvi/tiYEt6YWND33
-TM1sD8ky/muXy5qcq6MX/LiZ0e83jFxDb3r+PckZ4ntdck1DicUNJt/he43/djX/9dCgV/fn69Yg
-/zB2OuT9hpG5OOMnZ2ZFwpNhaw90TTd637WVf/E6WvWsMcW640KWQ8feHO/m/Hyfhzl5V64QLEts
-EmOYfzM2B+N44kpkzuUbIXTc4EvPXA/NbqkNzn1xPzBL+libSN7PbvOLLt7kbZez+e9dvhvvdq1b
-ZmTHDCIj9H/7wDVqfr4j+F/78z3T6zWJGT/eiJm9zpv5KaxpwNpXXRsUn+77e94rSS26nJBz+Gpk
-7rnroTlnr4Xnnb0dUnD8TkjupethuTcvh+deuRaWnXYnXh3WkJ6XWhefm1Ifm1PVQPKu+iD1gbqQ
-rJK6yByzX7s8113pWrw2+tDQlXZ+mnNmL2ZGaA6gNtiHnsV/tjlNev+1qJ3i63+9hm5L7El+34vO
-ve55qEG/x3O9yb++xKvqMiOYQdoTmVHD1zBTv3diFltVaK573LVO/vPLIKvO08l7b4dlpdQm5Dh3
-VGUjH3ZrKc8BLkNeSbBXdjz56tecnevwdK8az++9G5pVTzD742afjG6s65Ne/DAs3/rtCTXBF9JK
-7/ReY0aO+H+99z3I48/X+uU5XK/W5991X3dPemd0yB3SIf8G0Nnb7VG7fZDW52vtQ+ef3sD5zPSl
-Tswyx0Pa6w50zZJ1dvnYdhxL92jclau+FUft0LWlPLv5WnjR3RuhuY/IGD6+HVrUdjO8tO1uSFHz
-/aDcK7dCc4l95py9EZZTdDs6Z9OHLuW85UpmmO4QOrf+J7/wvz2+XOf/dOCa+nwe057kX296/QPI
-PxITBy9kxk2RMdNW7GQWSMUaP1Z1jTH8ucvOtuVgbMnF+JxDl6JyL10Nz791Pazo/vXwsrrakJIL
-N8LyT94IzS67EaUOqs/KxiO8ISWbxHd1bmOE2ubVoTSDuq5NM6bM/19fR7c31KLnrPWnMdX4/Dsd
-8tu+5N8gjRHMMK0xzAANPTJOQ4hPGkVi/FhmiPYkZkCPiUx/rQnMoD4zmRF6G5jpy0OZZVuvaq+8
-3jWHf3M9mOAWNYkHiAnZofXpudLHuiSL95dSnNsq1cTHZJ8jvrKMhBH4GmDy3cS33qgNVLe3eWcd
-IDmnT3tWjuHvXbbrKp5P/t5AyYzQ6v//MTbMf/OV+PlLvMA81SVeCdc0vPckZkT/Bcw3Q5cxI4d8
-xwwftoTRG7yIGao7lxnaaw4zuO9sZjC+15nH6PUjr9NbyUycb8MssajRWrO3a6rxiy4Hu9ZDyS5N
-u9OBzY5ejMouIrHvyc2IXe3Xoyqf3Qkrf3Mncvfr+2GV7xpDd71pDi5rbwwsqqsLLkbetaq+a/EA
-rf87/vGLH8T1AadgvIZr6zODegwnPw0go4jIT+Kn5ijiS8Yyw3pMZYb0mskM6TOLGdpvPjNi9Bpm
-3FSC/daFMPP5Uo1FQrnm90mdgwx/6bIWOq8G519OyD52PqbgzrWw/Ps3QvPrb4YV1d8Lzr9zIyT/
-5s3Q/KN3QrOvE396+U5wDp7PuRulXv20a+X0OSv/19fyxW/CR+hQz97r8/e9qR/p8/n7gWQch2uP
-Z74h4zRqyEJmtN5CZuTon5hRk9YyYyaYMCMnmDMjJ5oww0etZYaN28iMnsIxszalM98HdeiuuNU1
-R3p+MTjzYko2xS0347LP3AhVE2yWk1cbqSY4Mxe5x+HrBL8QLHb3blD2w5sh2TdvB2eTa1Rv/q1r
-y1KnVM0JC5aR2Drw//i64Cd7U8/Qg37f7QO756AORSMDmGGaI5iROlP/H/beM6yqa937nlSlqoAg
-Kopi7wXFLoj0shZrrVlXoYNIR7r0jiKgNBsoSLFh11iiJtaYqFFj75piYtTstF2y9znrGf9Bss9+
-rnOu8+7nw/vNua+1MbDanOMedxlz3L8/4zhoOjNsyBJm7FQtM35eEjPaNYY84plhk9TMsNEcM2Qc
-ywwZKWMGO3gxQ4f60r9NV2xhFhU9sPL6Su8T/L0+OvLJseqUL7rqt39Uu+nGxxVtjy6Vb7/+Sdl2
-EuNbL10t3PjVjaKtb28XbH1zP6/17YOC9vs3irYjJ/X/Ta91mRPy/zRm+P4DaI424PfssS/mYe71
-/c2K/HUQY2/qyAyzGMs4Wk5iHGymEd88kbEfNJXMv/mMo80ixsF2EWNnu4Se2/AJYQ==
- ]]>
- <![CDATA[
- zHAXDTN6eiIz0b+GcY06ZjR/w6tB7if0E5Zd188N/kEfG/uwtwY56MfnK1rvfVK69REZp3s3Cza9
-vFm0DXPuyweF3S/vFnW+fJS/47ObRaSWqGnyfKBfPHay3/+zbfadK0PHD/HMxtCRsTEiFRKZV7Zk
-ztkZjSS/G8lYkzEcQB62/VyYwZZTyLnNYuwd5xL79CA2GcwMnRXGOM1NYUYtK2TGBtcyE8VtzESu
-g5kZedZwUcNfBi+9qZ/Jv76enXVlR0PFp83N6z6tb/mc5F53ybmd+rxo82kS425eL9z88mbh1ldf
-FLa+vF3QevnT4i3p97a1eH2mX+g4YOi/PW5/zDf4e0QqOyMHxsF0FDmnocQe7cjvrUjEtu77m+Fw
-xsFsAvGHZOwsphO/6coMs1/CjBzNMi6z45lxS3KYMd6lzFjPEmbk0lzGyWs1M8Irj5mgaGFmhO40
-nF/zYoD7Gf1E2Rv9CunVp0Wrru+oL7/c0vTRqbXtdz+u3PHwUmXP5cslm1EzbLhV05rxZFvrFVIn
-PLqVT9ch1T9cqHY/oh/r6Dj9347lxjTXQo5IopcxiWUWzsT3uzAOxqOJnx9JLHIwtU1b8j87Q3ty
-fqOYIRYujK3FKOIbyWPgJMbejvh/F3/GeWo44zwthhk1M4EZs7iYGRPcwozyr2Omxhw2dKt6YLHk
-sH6052O9O8mDE7VfnqtMvte9ofFi/abD5yo23r5YuvkRObcbl4ubz94oaPnqbm7jnx7kbXvzLG/H
-rXsF7R03yltCfvs2c6o65/9zzPpy4P/67z98SV8ubEZGy4LMNTsyho70YWc0gnEYMJ2OlYOTJ7HB
-AGYoscMRs7TMiBkC8SnBzLAx/ozDUA/GYZQ34zAjjBm5gMy5kHpmVvxRozkNj60W9Oodl97Wz/K4
-rXeT//z3hJgnvWtrrtY2b/ukejPxnVsvklya2OiWZ3cLt39zv6Dj9cOCHT8+zO/49k5x59e3C7GW
-tNHvuV7m4jzv3xo3o3/xj33+w5qcC8k+LCcyziM8mFHOfuQ83BnHkZ7EVyxl7IcQ/zHEjfhMMs/I
-XBvuuIgZNnQJ4+TgzgwfLWOcxvPM6FlxzASvUmaaqpOZvuKk4ayyW/1nNj4zX3BaP2JR929Dl13R
-z/J5pZepfnyWF/ryVFXlpebmDefXb/zicmXP1SvFW85cKtusvPlrhOxjvX/IcVJfXPk1QvzyRVnI
-1/pE7xv6Je5rrto6WI3+X8+rL7aZ0ewQXtKcZlmI0EOZQWSc7AdMYYaReDx2ZgwzyTuHGesWyYyd
-qGBGj1zMOBF/OcxmKnkg5s1mhg+dR3JKGTNqCs+MmqFmxnmkMdOC65lpfCvjuuIjo1mNX1vO+1A/
-1OONfqnnV/plwe/0MbLX+njxu+8rY58dakp8uGdL1DfHWxKf7G3turimtePS2takp73bw7+7vqnk
-QUvXrVurG76/ndu47XrFJt/v9dzMwNT/9dxM6flY0dg8kHGg/sOC5vwW9CdyEPhLOxMnkoMMJ/PR
-gbExwcOZsbOeyjiOCmBclpL8OPWc8eLG7wcv3q8fufQj/QTkk0tP68cv2vEPxwUbX9vOa3g1aH7J
-Lcv52af7L173xSCPk/qJyx/oPUL+pE+T/0mfLP10tSr8+w83pD3ZthH1HGpy5JqnUbteKdn88bXC
-lps38puffl6w6e3t4o77nxe1sT89LfAs/twWPgL+/d+xTbPfYznsE5mxQ79hzPBB05jRkwOYqT6p
-zAQulxkf08RMKThpPLXmM9NZ6z43m13xWf/p2WeMpxeeN5lTdct8Tu0zyzk1jyznFF7rPzfncr8F
-Fbetlp3WT132QL9o6UG9i/v6Z/ae+/TjfR7ofQIe6VWBL/XqwKd6SflOn511b2sLchac116SOxff
-adoq4+WMX9AyBjwN7YGnEnfiJ5Ws4vDQpVKWgcv4xf+LXRrSMYNfH+xA8uEh7oz9SC/GYYKcGb8s
-lZnGVjFT2GpmurqRmR2/38ht/X3rRb16p6Xnyfjc0c9Zdkc/H/5vYd3DQXPj9hhNV9cyrrpNBvMT
-95ssLrlpvaTmua3H1p+HLz+tn0XyE9+AP+vDFL+9yxR/uloe8K1e8q274RS46ekEecPVCdyxv8ul
-G9+mqz/+ZQV3+O/Bqp5/eIj7/jNEferXcPHsj+HSidda3el7cZpPnqdhv1PwVX2Iu6bOyM7of497
-WA/BTLPpP4rk+rOYEc4KZtTkMMbFLYEZ553LTFVUMlN8M5hpi+OYya4cM36KFzNhgjczZa7EzGXr
-DOaln+43f/VV82Xd/zHa+67e0/+hPiTotT6c/enXopgvDzapf7xWrfzllxzVj7/lBTzXi757/jLF
-f8erKQEH9K5BN/Vy2Q09r7itD1c9fpssPnlQIH51rzTq9UdbIl9d2Kz+4cs6/sHbHMXneq3qzm8r
-xW9eVJTfbWi/fXN1Q8Xt9Vs8O96NGu0899+wS0NUbST3IPOMnKetxRhm2LC5zNjZIcwsn0TGja1g
-5nMFzMKEduP5zdcGLf1UP8n7N71Crn+3Sv2nsyXsX27nhfznz6tUf7uXq/j705zgv+lXev+ql/n8
-qFcE/KrXBv6sjxL+9Koi6JU+zLf+k+EBiS1mPjHrTQOv6P2Vt/RRwfv+Pk9evH+I8pQ+hP/6TUn8
-ywNtsV8faU1/0r0j/ssj7cHyIEaIijcRms7N1Ox7xAlnX2vk3X+a453RbjFm4kJap/1PhzUZtxEO
-bsy4qUqS565h3BIvmsxb96X1gk69A7G9eb4/6rnAv+ijAn/TR/v/qtcse6pf4HFLP9vrW71X0N/0
-K3IftGzcd6u4pfV22caSe+tb1O8ulGENxZ/YnvcFvZvPKb2r7y29t+ypPlzxSp+qevv3fM0v99aL
-P321JuiU3j04NN7QY/Y8xt/bi0EfJfYxst1P3PnmizPVeTuHa5KaBknFJ134vX8LkE6+DeX2/OjD
-lx8apczb4xAQU99vyiw5M8xqzH9bC/ov2zQieRbJsQZMYMbMkRjX0A7DRetf2sL/Lf+RzpcI+a/6
-RPmf9SnBf9JHBzwmvuCBng2+pWcDP9cHyR/pI1Vv9Xkh3+gTZLf0YvA5va9848up8oqjTrKub12V
-t/8WzX//XYnyB32O4qU+PnDf3+fKa044K7Y/mMP1/ujLf/hOVG69MZNtPDeFbT8/lz92P0R98ppG
-e+tqfvijT+qkM9+Eix3vlgvNt92E+k+nCyefCuFPL9Rpv71VL7upF2Yu5P7H8zInfnGA0XBmYH8n
-xsZ6FKmj5zCjJgUw04NyGbeEQ8Zua76wXHToP0Z43tEvJPNJ5ntBv9i38pyDb2KXeWDJcYfAi3pv
-4ekXefFfHdime/fJBuHtk3LV969XB1/Ry2TrNjnIklcYy1ZlmMqKK60DN590Cbyq95dePakUnzwv
-kFcfHeGnUDPBETnG8v3/WMLu/81PlbLeWhWRZyI0P5wnHftGrbn4NFE8/zJSvPosQfP5zayQvW+X
-qPb/4sXu+dqT2/WDl3Tmqwju8k8RAef07stX7bUYNX4JrbP/9bAhMWPKdBUzX1xn4FF4fsDyO3r3
-gB/0upAf9WmBb/ShxF9r5CTucj/9Usb98q48kPgGv9W9g+a5+zBz589kglPSTUKOv/ZVP7lWnPp8
-T1fO09YdUa9PbuZ+eFsqu62X/Hf/MC2g5pJT0Id6d9lFfXBw19ez5M1nx8k//M2X++hLgf3g+xDV
-kb/6sVlbbZWhaUYBISqG1SUYUU4S+PslnU78tscLhf2/BOsuPcnSXbmfpex8t1CVvMYiJKfNJjBt
-k+WioDRmlKMrjdFGdD3d4He7NGEGGpG4NmQ2M95NxczT1Rm4b/52qMc5/RTPR/ol/n/R61S/fZXP
-/f1lufjXR+vC355vwb0/8c3zCv7B91ncZ79Esxf/qhGuvkvSPHhSrr35rFg8+VbDru6wD/AIYPwW
-zGcEpcBg/7ti201X+Zn/9JFvuzZdkb3OGn3Qqq2XZ7F733jzx75Xqrbem6MqahsiVu4YoVnXPU5s
-vbkodM9DXvfpjdywm1crdeceJEknvtRI+14o2D3fLGdbb8xR1h4cHZC+yRL32+yMrejawb8eGEv7
-gROZEZM8mSkBKcyilEP9ln+gn+z3nZ4n9eUKrNH5v9WLga/0kvy+Pizo8D8WBEYXmvgFhjG+nkom
-RBHGiGyYYUR8nmVkaec4acuNxWLdqanBgQrGbdRQZsGYYcwiPCYOZbyXuTFs62VX9cWHK/mzX4vK
-LZ/M5NJrB9D95/u+D6R7ouMLzfjIHFOwZKUdX3tJna+8habzs/iuV56ag09F4e6rDPXVp2ns7r8u
-Z5suTlUe+9mfu/Iumn/0OlP2jT7K+7beY+naGzbzY3uM5q3Ya7xoxV4Tj/h9/byzTw3wKj1j67v3
-56n8u7dl2ItTfK9pO/v65/yg4/ql8q2vZsh7fponO673Cun9bUlIVtugRYvcmenOQ5lZw4YxKl8f
-JiIp1TxmdeHgqILqoegTCzn2kxf/2cs4ze3bBcoP/6xQHvuzv/LgX7xUdcfHqQpqbdjG3eO4I09k
-dI/mue8iQ4783UtZe2Ect7pniCqy0FQZmWmiikszoX0ve1/Jws58kRp6+WEWe+6toNj8+QxF3emx
-su53c4Pbv5/hX3LSfpmm2HCGu44ZR2Lz0MlLmdEe4YxrRJOBx4b7Dt5H9VN9LumX+Fwmj+PE73d9
-N867/JCtT/om8+DSXfYhDb2jQuq6nOQth8fIuh+4ynq/W6Bcf34im9c1hMvcaivmdgzhC/c78XkH
-hvNJtVa+nn6M16IljMKfxCuFnNFoww1VunBDvqxtmHLrlZnK1k9mKbd/4spt/XC2avulOezu157C
-8Zci9/GXEt1XuXbbKKF0hxPX+9ZHe/beytCbt0sjv7hUF3rjerH28r0M5f53XuirYPNb7GSZayz8
-y/cM9l573nFJZJXRlIUsM9jKmbHtT+oBUodOmCFjPIqvDPR6ql/u/51e4H76oYx785dixSW9EHJA
-7yEvarMLWUGuZWallarp7CSuotOJ+AFjPqnSEkzBIHcvxnuOGxO81IuRhHjaK0TZcWV7XcJymodI
-MiXjS/4eQvwGX75tONt6cw67/uQEft3R8cKaY+PVPc/8I/fc1Ypbbi4Q8zcMRg8GX3doPNf99TJ+
-2/1FXOPZaardP3hq933Ja767V6d7eqs25OB/eKjKOocpt92czZ59J4Q+vV4T9vazjeKvj9cpf9Pn
-Kv6izyTxLMnvaz3rd0I/zy9730B3WQTjo1lhELTt8RThyberpVtfZ/FnfhFV6VsGLV/qx8gV4Qzt
-0aj5aAJbe2aCv1LLzBs7mVkyaTYTvMyDCdNEGkVlFtnEpBfZRqQWD9TlrR/CdXy6EPt8pdOPwtiT
-XyrYfT/6KPa+WqKq7nZia/e58Ie+lmFfrerAL96KrS9nq9p+cOMO/EegYsvtmdzqDg==
- ]]>
- <![CDATA[
- BzYp34zPaxms7Hq8kD/wNpDd99Zb0XF7jqLp0kRZ97dz5Sf13vJj+uXB+36bH3jgP+YG7te7en+i
-X+DzRh/s/2e9xuedPsj/kT4w8Jo+IPiCPiDkul6UndcHBG446xyUXGwaHJliFBKRbOTv58PMnzSS
-WebmxvjLghkuKstUSCu2BEMTOiLQF1FEpBvDXwgFXcNYcm25mp2jKA+kpnuctrDWQUgusxRytgxW
-dT5YyO54vpiv2uXMF7c58iWbHVXEF2rPf5EQceNcFXfuG42q+shoZV6DDVd5fIzmzPMo7Z0vyrAP
-UnftWh5/5I1S2flsPl91YDSf0Wyjqvt4gvyKXsG++6kQeZHfWf0i74Izg7xS9pr7ZJ0Y4J2+19Lv
-uH6O4gd9NvbyKe7oI4NL9tj7BoQyXu5B5Jy8GM/5S5ll8xcyqpQ8M2H/y2Bp32M51/PUXZVabC5X
-6hj0pCs4idElF1ihF03Y9dAv9OB1De3DLe9yBgNDtfPpUsw5tm7/WC59rTWbu8GGX39iEvpPtF2P
-g9F7IO57ItN+dCtWffKJVnviYYS4+40/v+3lYlXHl4uE7nde2POpvvYgXXH4r96K7pcL2IYzk1TN
-H05WnvglMOTK39mgOySn+lIfEfy1PpyMW5DfYf3soA2PxgRGlpksXSpjfORaJlibbaTI3DTQK0DN
-LHbzZAJ8tYyPux/jPsWV8Vm8vE+LRko29PYJZjwWLWP8vIIZpYxj1LpIo/C0POuwsq4x4RW9E9Eb
-pC1rGo4eR7H3ZWD40Tsr1Me+0ih7f/RUFW6x5yp2jVD1/OCu2nh9Jpu1xVaZXGep2vV3d+3lZ+nC
-0dc87XVZvd0B/czs2gOj2bLtQ7nSzuGqmqMu8s6HrvKjv3mG7P95aUjbzRmynW/nBvf+PD/4BMll
-r+plIbf/oQ25+g8h8PjfFsoqdznKijfbynf+Mp87+YYLaX0xW56/1Va1evtgVVbjILkUbeA+dz7j
-NnYCs3jGXCaQzDsurqg/etnA0tNm1diCxc42n5vO7Xvlp/7gvlo6/kASjz7jpUNPlPze7/3Y5lNT
-+ZJtw8Tc5sFiYecwPn8b8bfbHNk1PSMxDxX733iyn3wdpv70fjJ76keFYv8vnso9PyxV9v60jD/1
-HS9efZEqXX6RoNz/6zJV+jprPqPSmi3ZOVzR/siNP/edTvvsbnXcN6e2i988LJWf18uCP9J7BW/+
-fkpQ0UmHZcFxjD+fahic3TEw5ITeR1l/dlywJtVQEZlnogrLNpZzKw09FniQ+TedWUryES5z3UDV
-nm88MG+CxVADMDPALRYiUox1mXV2mvUfzZa6b/tyXTfdVd13lwg7n/uCAaE7fFer3PetJ1e915kv
-2jJEqOgZiV4v9MeLa3e6gM8T+em5gqTHvdtSn+zuiLh+uUy9+/tgoe7jKfzacxPZXW89+NNfS8qu
-F4tUB3/0YY9+G8TVHx3PFTTascWtQxQFHYPlNUdGypqujZfl7Lb102UberNJBgGaPCMZl2kYKI8y
-UGVutlGsarT2WBrMjO5nywwmddN0mxGM58LljOeCRUxQgIxyiGWqMANWG29EdXFS1wxURyeYcORc
-of+iS6qyBndLm1ZqLaUWWKJnWNxzL1B78nak5shzHdt0aZoqr8Oe3fjZTMWeN+5c5eHR0OqSaxIM
-WWKr6pMvIzRHn2u5XX/ywnVkmy9P58u6nbjcBlthzb4xYAeyp96EyE7+2Svk6M9eIcd+XR6y76cl
-ytrDoxUVB52U+dsGq5KrLDAuAdAfk6sZ9OYTW7fnak6OYzNqrWH3bNWR0egrVa5YbRpA8jB/mZZR
-qbOM+JLu4VzbowXCtmfu4GaDZ0R5QkefcqoDb7zR28Vvu72Q3fXEg93zzBP94hzxKXxJx3Ahu8GW
-y14/iFu90U61icT5vW/dlR335oXsf+OuOv5Gzl58peM/fqXlLrwOEy9/GcuefKNUHP7Nmzv7Rq04
-8JdlbGKlRZAYbiAPSzVC/xa390c/7dmHK0O/+KxU9/nNQv78a638xH96Kz/UB8vqPxvjo4xlpjiM
-YSZbjSQ/hzPegQKjiFttqly52jQkMtWYjc42VeoyjN2XeTFLiP9cMncB1WNj02ut+ZRiC0V4jCFi
-hZScZa7JrLahmlFxuWZiZLKxlJhlBlaC1PtYrjnyWMMf/SaErWobzuXU2yh7Hi7gd73yAdeQz64b
-JBU0OPA9Dz21Z67FRF49Wxp394PmsHM30/ldb3zQgyaWHR7Nb7zvxtcfnyhUdzlzTRdm8OuPTCR5
-wkRF70/uis3Xp4fkbbJRlO4eKq8776JMbx3k6UXqBdeFzKK5nozHAl8mSBFlgD5LRUKVmeu4qYyL
-uR0zxsqWmTJwOLOY5B/Ir0JLdoxSNxybjp487dpTU8XWO4tDq/ZNlMKSjRUqiRF08caURQgtjPTK
-geqy5mHiplOz+c7Plqg6by8kufRUjL+y7Y6r8uiPfuKR7zjlrueLoaPAp60bAN0FrunsNHb7w4Vs
-x8OFws7XvnSurz8ygV+zcxS75eYc4dCLEP6DFyqMLX/x63DhkxfR3OlXPImJC9jyvU7KhHIzGRdv
-6OPNM97uMkYGzn1cSX8urWEgV9AzFNwoLqaon4yPI74jyZBb1TyI2MIIvpw81n8yDX0rfO/bAKHm
-6Hg2ociMTauw5Eu6SDw/QvLBzfZ87sY+H7n+xGS249ZCvvPZMv7A1wHCwa9k3N5vvShv+/CrYP6D
-b5Xo01B1Pl2kajk3VbHvjTv6gFDLYs83//EbnXLnu8WKls+mKrp/Xojvz+VUDlAlF5jxtcfGq/a8
-9WB3vVsGbiZbd2QcW/PBWNXGazMU3d8ukB/4dakyq9XGJzicmT1+BjPVbjTjNmY6s3DGLGb58uWM
-X2Aws9yXxDaSH/uHiIx/MM/4essYX385I49MNlLlNNuAPQj/gh5tsBbB+hO4SENWQXwPG21I9eO2
-XJordj1dznU/8wCzm00pseBr944R9j8N1h66rYbtCjV7XMTi1qFgYkkHHqjUJx9qpRPPNfyh72Ts
-nh+82L0/+aAnjGu7Nx/XUCptdORqd7kot19z5Q+/DpHOvoxSHvqrj6L+wgRV/c0p8q7XbiFd3y9Q
-Vh0YKY8qMJFLqYb+qigDeUS2MZvSYK1YmW86f6YbM33EOGbhnGWMz9JA4jeVDDQiwYbXrNk/Qdtx
-zVu99dYS6K6BQwdeoUKlY0JkPEP1MIubHdHrD+6LtG7nOPSRkjgwgi/c6MCXtzupOp4u5A6+C2D3
-/eDNNX40VVjd5sCTB3jxQladDe3JK2wdSvOblk9nUq5g7YmJ7KZzM7jms9P4qn2juJrDY5S7vl7C
-Hv0umD/6rZzd+ZMnu+aYC3gZCl2akYxfYagIyzVm42ssQqDbIBH/nFJuAaaeMizXBJw98B+5FaX9
-hcIdw4SaExPYLQ/mwr7A/CV5xQg+rW4Al1pjzSUWm7MJ+f3BjhQqDrmotj+eT3uQGz+cqtpxYz56
-K0n8C9WevBMlnXis1Z2/nSxderiCO/pdiGrr57MFEvtVGz6ciN5E9K/xl76MVOz72UNZ2OGgTG8e
-qCrrGa7c84u7svfNMuQ7xDaXKff+tAwsMFVsmgnWNGSaKEPKaWm9OVvR+cCNK+oeGhKWY7xsUQCz
-aMp8ZvlCX2KXCiZYyTFKTaShKprUlimlllxKnrkiNs0YGpSU8RKVZcLltNiJtWemgOkDrqsuq9le
-E5vTPzQ210wtRhlqY3PMdKXdo4W2mwvBegIbgyvc6sDV7B3Ndj9ewnfedxf2PvdHn6tYt38CeIJc
-9xMP9YH7Sv7IU4Vy72sPxcEfl3Gnv+fVV54kqc89XSEceCVT7n3sLqzZ4yIUtwxhG49NUh1650d7
-l09/q1Ed/TupO+7PUmY1D2KzWmzYrjdLVD3fL+U2XXNVrTs2litqd1RWHx+tyt5q6+ERzLhNc2W8
-Fwcy0PGE1pdSSX6S2KPURRtS5kflbsro5BOy+oGZSu2S+E2h+ehUfs+XPmz3zcVSVsVAMSXPQqrY
-6sS1nJ0uNJyZxm0kn9f7g5dy9zdLxZLWYfzqRjux8vAYaG1weU12Qt5mB8RJoXirI2XqrCb1YDbJ
-xct3jRSKtjpSlmRuy2AuOc+MSy63oLyddR9OoD8zGwaxsfn9wJrHa9CHD0aVckWeKfqkwdsT152c
-KNV9NI1LKbcMYaMMgpWhDOyZTSqzEIs6hmG+KPf94Kk89MaH3f3tMnbPWy9V57PF4prD48B2B6eA
-73npCcYa2EPc1j6GNdv7tY+450WQcPS5Sjj9Qst/+FxU7n7jwW/4cDK4c4gbqq2fzmaPfB/EHvqT
-n2rT9VlsYZcj1tVUOZttuTriM7ueLUYOwW67Nx/94+D5gx2p1JC5FpFoxK5usMXagKr75WJu49XZ
-bGx5f38fidRB3kxggMSI6esGimt6RoNNKZb3jCTX0l7MbrHDNVYmFPRXhmYYKyKTjKDZwW27vQBa
-PWACqet6J4mNH80CWwe8T8q4LukeCfYoZWmTWKFsuzJb2f1kEZmPC/jNp2cKrZ/M49pvLpR23vPX
-9j5Qij23fPidd7z4vd/5coe/CRbPfBkq3b2Xp3t+vVb34LMK9N+HXz6fI558rIbP5Qs3DyFz15U/
-8DoQvbjcwd8ClIW9jl4+HLPEbSmjSqy15Du/WSbs+cYPfDG2pGuoqubEGFXmFhvkot7LoNkayoBv
-Q7mRVXvHUT3G6IJ+UmrdQKr1sHqjPZjy0FWCHh5ine7ktVjp0H0luDB8RCz5fdVAMNG5/d/7K3e/
-9gDbjN360A3jCxYdNAv4BFJXplZb8yU7hvFlJM6S+kIgvoLP32gv5m6w4/M32bMlpD7K3DCIz2yw
-4TMaB0lJZZZcaqUVR2IwdHGhG0J1QDVJhkJOkx36W9meNx5sz0t3cDzEsh0jqFbRelLntF5zg74Y
-9PGgywttJjCGhMyKAWC48Ae/DJROPdFojj3SigcfKFEjgBmNtRPKEKo9MEGo3uEM1hO38eIssGeg
-DcKROonb99aP3ffOR9n1fCHmDBhmIvRn0ootxbJtTshb2F3fLhcqD7lAdzeE1DKoyaABJNTsHg0b
-BUODTSo0C1Zo4RMMwXxXrcwyVcUX9edK940gc9tdXHNsfLA8kvFa4sMEhkgMG5lpIpVvHwGOODhA
-fFKJBTSwwCfkU6qtlDGZJj4BIhMkxBmQa+EE9hCYrlx4mjFYMgLlZ+92oSwV/FzTO06q6Rkr1R2Z
-TFkp646MZzedn0k1RXZ+7aM58ICN/OCTuJhT59LDj30eLfY89qM8CjLW4vGnvObKoxTtyxtrwl9e
-bkSvHFglmsP3BPTlQ49BtfGjaSpSg6i2f+6m7P5usaru4/GKlZX9PT3kzKLJ8xg/UhOA6UTjZmqF
-ZSD0iLXJhvKIdOMAWSTxm5GMEJljCvZUVOsl/9C2y8spOy2+3AKsKOiWgKEv5DTacQ==
- ]]>
- <![CDATA[
- KzP7IW5rP/hCF3H883ix6fQMcOnAVGJbL87mj75V8Md+Usp3/bSArzzqAoY9X0dyyuaPZgiZjbYh
-mmgD5HpC1UEXxFnU1cqIJGOw/dlVa6zACGQz1g9UJhURn1lmISQSX5e1zkYCbzK3dYgqNsskKIjE
-QJXIgJNMNdaIPUHHCmuPLFhCJA71aZy2DYeOgZhVNkBaXWMLLiPOCzqoYHFLNQfGg1dHYphHHyNr
-12iw7qBbRJlRmfV24BiC9aHqfrQE+gJUCxZ6qi0XZiPvEo89p+PApZVaqsLijNiwhD7dRjCWSaxU
-bb89T8jaYidTJxqGCMQ38tEGQkxuP8QQobDVkcusGSAPTaQa0sqoRHodoHkWErbSkHI2yrqcECOQ
-owTLJYaLSDWBfhGpU+yl4iZHaGIhnkOHlUvMN8M6mVyKNyQ5goEqKs+Uz6gfxMfm9VOK8ZRTJIKV
-X9jsINbsGkPq9qXgJgo7H/jynV+4i82nZlLm3YYPpkKzE9p9mv33VREfX8qIPvdRTujB2zrKhmy5
-OBtzVNV6yRWxXPr4WYR09Xky+vRQw4PjyoeFE1+20ojPaibxccdwPq1+ANaquLyt9qgRAlWRBu6L
-Apn54+cxXkuDGEVUtolSm2LkR2pXT185yaVJDqmOo/rbclW4AZjc4E+DXwr2PxeZbqLkYg25iFUm
-Us56O7720Hj4QHCbuE3X52gPPpC0+5/xUv0HUyi7sGLbSG7/1wHS6Reh3Nk/iyFH9N7cmuNjadyB
-Plle6xB2RbpJoFzBQHcWffXQgFPE5pn6+CkY+EWqU0byACG/kcT0InNoc3LRCcbgYlK9SmJfYELJ
-lBLDR8QbS2nExjIrBgppZC4VtQ2DHgHYReoNR6dSLjPJoYWIFBPKq1p/Yrqm/vBUcLmgWSXEJZuC
-Uye0fjZfqj84GXzDPn3DIktN2pqB0OuGvgbXfn2B0H3HE7kZmKFUN7t4yzBwMNVHHqt1Z+6uVB9+
-KHBt1+ZhDkObgCXXErqpYKbyuc12fGKVhSoqwwRaGWJmM9XYhI1hXsrFCAN2ZY4p1RKq6HTmV1VZ
-K8JIfkL8Hdi/PKn1aCzParQF611T1utC9WbKW4dD94lquuL8Sd0CVjq0upQkRkBvi1+1dgCf3WxL
-NQxKOpw01YcmUJ4U1jlbTk6Xum97a3bfl6t33PMWNp6dBbuUyAP3zBHP+a2X5wk7bnigHlTveRHM
-dj9ZKha0kevUbAdNGVX74/ns3h+9wZxQdjybz63pHSUVbRuG7+a33JvMJ4Hh4yst2JUlZiHqJEM2
-JseUTcC1yDLxk4mk5vFk3MbNYeZPnct4eYDLGWEgD08w4rKabPi1B8fwmfWDwIkHS5XqCGfV2GgK
-GqHdNwh65rJgNQPuE9VnA5+K+FfsR0HMA1tI7LzrCRYz9U1pBZaqjlsLKP/n3Otw/vSf1Oy2lwug
-Ocan1FqTuWEYQGqvoBCOgQ1yPc89VS0XpsFP+vioGF9fGQO9KzoGWevtoDtFdZygyawLNwTvOITV
-MEopwhAsb8qITs63FFOyzdjwDBPKlCf+UNx2ZZG2/eIyqeHD6bBrPibdBHwwYcvV+ULH9aXgfomF
-6+1prrX1yjyu8/NF0GHQljQN01TsGAUdAG3t0SlgHXJtV+Zr9t5TcHu+8eFXVVurIhKMqc551fbR
-6g29k6E7KOx57c/3vg6gsb7nqQdlMVXtHyPEVZkL8UXmLJl/CjIe4EqL9WemctseL5KabrqBFQcd
-NYwZ1tLAJhJ2f+VDNU+JvxEK2ocKRZ3DaL6+/uNp4vbn7lLnSx9t59NAbefDQH7HF0ughajOqbcT
-y7tGgmUIjh72M4BvzJf0ONGcY93JScKm63Oljq+WS90v/bXd92RhPXcU6p13A8BPJHN5mrqsbYS2
-uHGouunELKHz+jKp/aYnsU03mpOR3Iav2jWKxLqJlKeXVGMNTUyu4/FiYc+bALH3dRDWLbBOCh40
-X9U1ksb9NOKn1+wfi/UZvmjfCFXSGgsus9mGTamzYlfkmsqEcAOPxcuZRQuXMrgnFMzGGkDLHSww
-fscTd3B86TUida1cITBcdKIJNCo0TefdqAZaRp0N1aYl8xzXQtNzO1DY/Nk8qXjzUHDkxfQKa7re
-Wb6d5F0l1urkXHPy7xGU13fkexl//DWn2P+jJ5/XYAcmo0y9ksS2Pp1DPqNuIDjpwpqj4+EboJ0I
-Lr0Yk2QSWrhpuK64w1lXvNkJNRgXAT8eahAQGMSoxDAD8BgRN8HbAosbvGEuOtWE8ifX9I5Vb7m0
-UGy9vgi6rGCOUg14sF9JPijWdLqApalsvzhHPPKE1ey5L5fA4tbFG1FNGzIuYb03BHXPHX/iVxfw
-PQ+XiwceyIUNJydzmeVWYPgL6eXW0DrGTyG5yAK5OdYexPKdzmA+I56AM8ZX7BslrO4eqopZbQqN
-PRIzBoLLx3V95yFsvj+f2JAzaj8pr2MYZdf1PPRU7bizADUvNLOwLkbX4Sr3jILNa9sfeIP1JnQ9
-WyZs+2IJtA+kFfn9oesHrRl+x62lqp4Hi8EJxZoI9b+4ztX7Xfj2Z0u0Ox758V1fLSev9wT3Qbe6
-3kGMXGWCeY81J03DiZl8120PzZ678tA993h1xx0vru3z+dBsFZuOTQXrTqw44EJ1r6o/mKju+SZA
-6v1Kzu/8kxfb9XKJWHVkLF0/ru51oXy7fS9kuhNfRGs+eBLKNVyeRu9jpDUOZFPWWKLWDSE1IHTX
-ZeIKA3AQxYyNthJ5f8qRhGYMsTuFEGsY6KukvGNoq4BfqK07MUNXuWucmFE7SJ2ybqA6v9VRaL+/
-VNN511do+sxVk9fgQFnIiK/gXa8qtYbGmfi7dha7heRlh1/KNaceRlGmWukOpz+0s5BHcZpVxB8m
-GokpYIq2OeB8tYUdI7TZTQ5goOoKtziBB4tYSzU3SLwFF59q4eVWDZKaP3PTbL/vHbrtrr+69aY7
-1fJOrbLW5W0aql13Yho0vkLTobGRbUZ1sMn30ub0sbiFht6J4qEHcvXF23G689eTweL28/BnggO5
-PhZ3901v7e4vQtS77gexXVcXUhY3asrOp0tJDT0LzEHUI5pVJdZsBMmtSP5LtRdJncGReAM2vbai
-ewxiPXiB/Npj47jEdZbKyCwT1D3QL1GX7RulLtk/impcVu8fj1wBzCKaR2w4NgnXELalFJMMocsH
-+9dsv+ela3/ip6k5OQX5r0qMNgjhwg14xA1oXkGrgcRlvukErXuk9A02YFyS620KXUNNO7le258E
-aGrOTANHHfeQEMdYKc5QCE810aSXD6AMzs1n52g77vuFdt4OBnMXnGfoHbE9xJ9tuu5KdREKOoaB
-Hcy1v1jMNX02k686Po5ff4HUVEcnCOuOTWR3PXbXnrkZE3nuXKb27M0VigPvPLnGc9P4DVemC6vb
-qY+F5hzu0wmlHU5Y14M+Avh30O4Qul8sh+6Jn5c/4+NF/KpCJHlomMEfenPalDJrPibZBHGR6mal
-1g2CVgrW36mGQVy+GeadJr1kgFRP4iAYq+ByU+0s4r+67vqoe+8rwOAT9nzlr+okeQy0s1aUmysj
-M42hLasSE4xUQrwheNza5AprbVyJBTROKFM2IstUpEzbEkvKVF67Z4wEPjc0ILKqBkKHGzozuh0P
-gqCxQrWNU6qsqW5h+e4xoZl1g8OSiqyhqaJe2z3mDxa3umb3OLb3hY/u9LXYsOsXC8XjL3jYjP9y
-OdOn07R1CHSBKIt73aHxVA8bfmDnMx9p3xN56K5HSrHrKy+BxGiqnUViNtUZym8dCu0slTaKamdp
-/kU7S7XvB0/Uh7i/FRzI0lypTzurkmoFUG2b9CIraFNQbXjKpe0ZAf4zbO8P7SzNtkfLpR3PllM7
-JnNcISQaqohtQWser9FAq2H1+sHIp9VlnSPxncTYIjMxOr8f9OW1bfeXS50vvKF7wMXi9QmGSiHK
-gOq3QDO8Zu84+BjKQazfN1lsOeuq7rjrBa6u2P3CB4xHvv3JUhLzKHeebfq/uPPD/smd7/nGW3vi
-WWTklQvFmt0PZUL9oYl03RA6DxW7R3KZTTZ0XbH+xBR+88U5WAtXRGcYg3UskbwccV3b/VCGMcd+
-K+ScVK8YOrjQRNTEGCo1UTTXo2zuFamm0EWiejXQg45KN1UnErvJXm8H9rl697Mgqp1VSa7tH9pZ
-tdDOIvldSomVpnTLcDBjtXkk7v2unSUkVFooSB4ctFzFcGKUoaAlnxUaYSRGJpqAtSzoiG2uhL3W
-2VB9PBLH6JpIetUANm6lMfSZwPSm3OvN5+dQFjd0tkicxiM0uXog9OpC8xuHatb2TpBaLs8TweJe
-1zse+lea3fdkyJFxL4vPJzlTUoWFFNfH4qb6Q223F1DOLDSfwbnG915/ZCqYtdiPRvV7E1eb9a0D
-51KND118sSW0ozTJ+RZ92lnNTsLehwFYHxSzoJ2lY+Qy6Jlk9YNOF+67QS8McUiTmG3+u3bWEGhn
-UV7pH9pZ0fn9dQU7Rqgbz7nqyvaN05B4Rjn8K0vNqW5XXttQqqGYt84OOpbako1OYOlr84kvJOOq
-jiu3oPbdeH4uXk/i4YC+15f0vb6gywnMati3kExsNbt6kHZtz7jQjpv+4dvvBtO6qfvuP7nz3B/c
-+f1PFf+dO/9oGbjzutPYe/FCjZgGDU1Nwfbh6pKekarYbFOsSahWru4nZqy3QYyHblYwG2Eg48IM
-VNBRK9/vIjXdmoc8V8rrHIr4B20/Lmq1qZIPM1Ao1AyxE2Oqw7qqYgDVYs+qHKQp3uqkzWrs02vD
-nF97bBLf/WQ5dImwvqgkeQ+0ZaBzLgtQMYFevlQ7SylqDFT8P7WzRmGNCDFRFqxjgr0UJL7EGCI+
-aaNz+2tj88y0cTlm6uiMflJMbn/4aGhxU33qopahmpKtTvCfQnKuGeI91bsg11bccsENGj+UT5+x
-zgZ5q4bk+sQPTNJsPOOm3nB4qrr20CSq2VbZNpLfddcbe2+wVgoWt5i53oYn7wl9M7H9rgdyUqwB
-quOKzTUJRRbYN0K1sSq6R2G9hWr/FnU78RlrB7CRycZUy4nETBoj/9DO2nF3mdR9zxdrKX9oZyHe
-qjMabGHPUl6dHfTKoJ0FvWTUZv+lnVXWp52lI/V+WIIx4osuc/1gKSrTFHMXDH/Nqnob5EDwudqy
-rSOontnqjY66ggZH4gOHIHZIkbn9qPYWeX1o1gZ7vB689X99Pep4TeWO0WBuU80+5BobL83Xdlzy
-DK3eP0mdX28P7jP0nqkW7JrD4/hd33tLe76TgSML7Vho49HXk9iJNQC+9SNX9dpd4/p019OMoZUI
-/QGsB+KeVxArMTIp2jBIqWbkYowBakesZwcrNQw0sUXiM4TGyzORS0rJ1VYh8nAmKJBnAoMVDK+L
-NdLm1drrKraPgg466nKqbYq4U31oAtYOqBZs9cGxYNhjTwFqVvbAd35i84XZ0JuHdg==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- KleKnn5j5S2VPlbtT2MPtD2KM+uuDBU317tJO+ou7el6GyHrqPRji9qPigo+mQkf/m4ietJFs29b
-jrDlLWdE1d8OsJ21LrAnezseRUqqSuxNc37VMU6vWmeS2bfZ6O4PNaM8Xl/Q+Puho80ZMSllbtHx
-5e6xftWX4t2rAxNONyUnWHXei5Z9KQ+Rfm4JEH9q9ZN8a/Hb23U/4ueG5LhDLdmRFj0PQ4VVPw6Y
-3Ppdk732xVia04LjfJ+O2Pv+Mi6ocB1gVzarS5/E3LvNMvE1jP+uNlNmGbUiWVKrHhdfvoOOeqtK
-X/moI33RctSsvMRNVlLuJH70wUKU+etOUVjRKirw9QpB+LtV1ON+SlZT4n7g/ZP4/Z1P4+TtJf6S
-99VeZv0lYWcbEhI8a/wTPWr8E5IqXWO8avxTZM1FF5na1tMWvW/DXeuDky/WXYoKrXeLyqh0Ds+q
-dgy9Xu4UhtcbcbHMJ9LvnU+EX/mlyPN10VF7PtwP4z588GCKe4+zT/ssZE/qj8he1J+Qva46J31S
-f5C708Rw15pMJR8bfIT9vA33tePi0absuFNNl5NONF1JPNp0I0nWXuXDFH0+LCj+m0xU/eMgVfH3
-Q8ZveBPD57y2cWrnBpPLH7dI3rac3fOhKHJv1/NItvmDPVvUcYwtbjuJ8fNBaXqjCZv93kByr1ou
-flt2yrz+lc/B1luxe9seRRxqvZdwpjE1za4hPMaryjfCoS4wLKDCKyyjzCX8Vo1DWF6NdXBJw7nA
-wkrbkIJyu5DiauugiirroBL8dVmFTUhxsX1oboljWEaJa0RAiXfMifrUaLPel0GSvmpfy85H4VTt
-HyeFj3gBfe8fQvbWNyF7v1siedC+R3zlowmb/FVLeqWDYe9+Y8Ql7Wdl3Y0B4o5mL67jvYestyZY
-+qksmOn74Cb+3OYj7y0OMe+uCGebOxyET38TUk/eU5L86iPyxncXZb2VQea9b8LdqgOT/OoupZxu
-yry8t+NppKy70Htf19PoA523Y/d33oiyaQ6LDqryiLxT6RBeWGMTUlBvHfyywTr4Nf6YV2sTnFdj
-E/yk0j4sB5+7lArXyLRS18ikMrdIrwq/aPmn/EDjEl5sElK8RHiF1xDf7ZNIc3v3yO52WkpfN50y
-Ly5yN68v9LdoKwqTvGk4Kcrq06TSezSlWY0i6YPWfbLXDWelBTgmv/hiKauu8fQr901xrgpPsWgp
-DBfntRymrv2mJ0yo2yi68kWbfdQtETc2uJ1pSEo+0nIj0by7EPvCvCjznqIw6de6oL1dOZG2jZEJ
-8TUuMdE17gknmjOTZL3vgrj2WteD7bfj3Bv94z3qfGNia1zCr1c6hMJ1u8Ih7CHepxel9uHPi5xj
-nhQ5Rd4udgqPKfGIONSWHSH52Ownbmv0kldVXhDntx6VFtdYS97VW0vLquzhbIQXXcB27RvpU+YT
-5V4WHONSGRyTWOQR7Vfmm8B0fHAxfcULBQ38oQPYPwWUesfFFHpFpRV6RDrURmD7SkwMLr+UeAi/
-Nrqv39nwDW9o/Io3FDV9Pwn/9tGGWylBlf7Z/lUB2SdabqRbdeREcfVltuKy0tPuNcEZsE9wvaiw
-C7te5RiWVuYSdqfaPqyw3jokpd4xan/X7Wj6ly5Xkw/8QdOefxwVfOfPUd8/OZv3Pgp0rAyL8au4
-FB1X7B6RUegRYV8REXWyLiniVF1y1KGmrHD5h9eBll1PwmUfGoJk7xv8ZU0tPuIHv+ylr/9dX/z0
-l32WjSURpxozU443ZcXvf387ek/3s4i9H55EiT+2XaI+/GrDdne5Sb5VBuxvvxlp2fMg3LSNP2za
-1L+feV9lt7/9boxrXdgVs9q8C8YveX2jzG8bjHwfzTaySZxo7Jg42SipcY1p2e8SurvD8XDHlZjg
-BveY2Cq3SKvOG+Gmv/KnDTt4M4MPvFS/l5fp9/BivV6eNeznLU2/8qdMf/BnuG+Vntz3Sk/qyxcn
-w2ZeahDRuMjkHq9Dv/mxV1rUZGteVel9qPlOgmNVRHJE2cWEjFK3GNuGmBRZV4WfuK7Bhatts5PU
-VrjKuusDT9WnJzpXhiXYVsTEXy9wj3zwxjnMui4W++ynMfLeslDLroIoq86c6LNNiSm+tT4pLtWh
-CUdaM6PZ3zovMO3tjuKuBuw7y0KtunKjj7ZmxZ5tiomJrnOL8ar1jRd/avKhOz/b0+3f7AQ1vKVR
-IW+kf7d/s0FwzDT9wGxl3SJeQ9Dx/Zjkl4qAi+W+0alFbuE47oVfL3QL9yrxCzvamB5m1X4tjO3t
-8+DqPtiyLz/tw3F8P9fQ7nSw7XacR1VAwp3XLuEv3jmE5bx2jbz1xhX/v67hj984h6e99Yja14Fj
-bE9hKMRXn3LfmMdvncLzixxCsrDPKq6wCepvPBfwEV+F2Nd51PpGi37/6KzbzAtMv/Nn9nfciLxc
-7xRd2Hg++FG9XXhOvV1EYKNXkuR7qb/ke4UfxEOL/tfhwt5fz+o/5dWNHALH6Rw4objL/LTCdqEU
-bdqph9Zv2YFUN+9Ea1U10Or129EKVXW0WtUYqVGOg7TsH03QyvzbEu1aXpv+0ubsVBISlvbiYuT1
-Vx4RoQU+kTF53pGpBR7hwfl+URcwdjjekBkj7v7gbdZZHnqg9XYMxkVxwSXe8SlvvGLS3rlFZmPc
-EFXmGQM4T9jw98NmH/NC0spdIl9g//akwTrkVot18K0261DuR/0lw+xPG4ytw8dr6kvQMmUVNHfw
-VDQbTUXKaBKagS8V/PnS4TPQqhkL0M6dEqQrtVfQkbspbtnGoIUTlNFMNB3/1nQ0RnEqGq8wA00b
-rIKUhy9EKpNWornK69GSJWpog8kJtPNS+ZTdz/ithpW8WNTxxxn6Db9X/ObzCfP2t+FZbzyiC944
-hr4pcgzNL7ELefzWMSyxzC0qqsQr5mKFX4JbRVB84huv6JtkT93CY99eiA59dzFqT/fjcKr9l/NM
-T7erfUNIdHXj+aC65nOB+AzFUT963PTqeePd2b+s3O14baKeTfp4Q6c7U/X936roZX9ZrZvz9w16
-9/ktetG1C9UFB9F8lVVo7rR5SGXqfLyGKWgMGoVGoxFoJL7G4a+U0GSkojgFzZ+kglZtNEU7zEMU
-1c8/Ha0R1z9Lu5HXMfnCHxP8wtuY9T4LknR3+oob+t0ljV1e0q42v4Pvb0RfqPSPjXvjFZGa7xF+
-9bV7OPaLERkFnpEPi5zCX71zCL1c5BaB/XH409fO4a8KnEML3jmGppS6RUaUe8U2NZ315ztPBH9p
-tUn8pednvyPtyaFGv/GHd73mN2h6vJq0XWozaM0WTbRooQpavmIx0rI4qaDreWWqnnvGZK2DtooL
-Zqug8WgsGo6GoSFoMHkfgteliN8HIYU/vx6MvzMar3ok/q2h+CtF8r3R+P2nMUvQ6rUStJX2Vdh1
-i18m7il0D3/uFx7z1DciPN87PCrfOyLq7YWImIKLkWkFnhGX8z0i7uS5RTzLdwnPzXcJe/jSNew2
-Ppu3ilzC7xU6R7wpsQ+9VOEXx31t9xZ/rvOmfvnkeq45KvplE47BLeeCoxqdo3Z38kbbzQ6hxdMX
-YzuciF8/vLZh+FUpkFXA3ozCF7zSQeg/3uDn//lNgawGfhPuwBg0bNAE/HEsGqowFn81BU2bsByt
-3LAX7fKqnCrow3Gjn3fCPmqftKfJ73Dz1ZisPI+Ignzn0Iw37hFZb90isI8JfV7oGOJRHhBj8eFR
-sGdpYCzY5oPXTmG33zqHxxR5RhxuzYwQ/9Lsx/3W4OPUEBhb+f5MYGiTc5jxb/zRXZGvlNdtN0Aq
-o6fgNQwnr38ofoXw+Ri8psnY4ibiz+DzQf9lNf/5bRBZ3b+uexB+h70bif+9KfgsLttxBKn7tEzR
-us4vNerjD3DtH7zkbRUBls1Pww42Z0eer46Jsa6JjH75EmNZbJOwhzGvL0bCPua89Ih8UeBM9g18
-6cN8l4j6Iqeo9lKHMOnHIl/871kZtPOcSQ9/RPidt9F9x2tvMbJCE/AO/b9+gzUq/HlH4L9D/rxn
-U4ctQHPnGqGV2ufRDtfKcVqd/G76U6ndmeLEwPgXPpG3XnlEPc53iXyU5xb9qNA59t5b56jn+a5R
-r1+4Rb3Mc40Ieusd7loeHB1Y4h0VUHYxMqMc511ljuHXS5zDEks8IgVf+TPaL3lVLa+bkzWsbBVW
-rVRF0xTGERscQV7F/2lzCuT+KxI7hY//eQ0DljgU/3wYOXsD53AQ+Ry+Nxy/j8JedQyahiYMmY9m
-Ku1Ci7ceRqoWqQradbw29bnD0aLrgX92oWtYQJFP5JHmjAjIh0/Up0QCLoO8EmOvCG/80bY6Iupg
-a3Y4fD/7nUtYGcbsddXWIQNY1zo4ocY1xrInJxzjC6nG+eBhs6ZP+/+994Px9a9r/et7sF7FP382
-sO6h5M6MxHdoJH4fR07vgEcd8EGKf651BDl/U8evRUs3H0ZbDt0con2dXyHq4q33Nd8NPlWRFhX+
-5hKxw+P1KRHVeW7x7wpcomrxHtYVusQ3vnZLanznHF9d6hj18o1LFLbPyEcFrpHxhV6R+v28bI2a
-DE0ZM4mcrf/OL/xv3/5a53/3Bmsa8eeeDsXvw8n6x+F3HBMnrkdzFonQEvVzaJ00YdD2DH6W4Wfe
-al/9jYuJz7wjbz73jHr+yi3mTb5rfGm+W3JJkXPi0wLXmNwCl4jkAs9wx7KwCLjcygMicHwPj6pw
-D9/beTNIr4TXX7Zo7f96HQPeUJG8ZsV/2dNBf/5sJP7pKPw+YdA0NEVxFho3aCrep0nYJ83EMX42
-mjRkARo3eD4aqzgPTRixHE2buhstVXNBWw68GqKRz6/iuvOdMG4Jx/EAYkKES1lwlPRjiZ9Z3/OA
-I43p4djHRDzGvjIZhxHwNYDJL2PfWlDkEN7UeD7sOs45rZvCIg2/8/u0U98v3KonQ9MUx/5f9gb9
-F18JX/8VL+CcjsFeCdakNHwBmjZ2HZoxeQuaPmkTUpqyEU2duAFNHrMaTR62Ck0ctRJNhM9HrkFT
-R+Pfm6qB5q/dizaaZSnuyuYXG7fzB60abvofrbwcDNjszjPPiHgc+1peu6c15Xumt711Tel+63H5
-Q6lrem+FS1p3tVNyU4VDfEmJUwLkXTvLeNVxiv9v/ONffhDWBzgF9ktpiAqaMFgJfzUO7yJEfhw/
-FWZiXzIbTRm8GE0athxNGrECTR69Fk1T3oXmLMbYT9sZreWSBm0Qpyhs9euaYPiFtxR3vXKKeeET
-cffJhdi3ea4xpQUuMWWvXePLip1i3hY4x7x+7RJz561LRD72py/eOkXC9yPfeYZrtvIaS1dp/K/X
-8pffBB8xknj2YX9+Ppz4kRF/fj4e76PSkLloBt6nmZPWI+Wp69F05R1o5gItNGueCZo+T4imzzdB
-SjO10JQ5ukh5EYtW6AejrY7NY9Tf8Kuk7585hT4LiCC45fWliIcFLuEYm0VGF3mEYw==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
-revnXNVvobuhLOr6OYfL7PIr563r51zVzwslezqy6FjVz/KW5gXq+i2bybWK04pyJteKEpHsqvrN
-V7/Svq7fHHHLJer6GdfcY3WGuev6zX9CdZG6flbpiO5n4eat6+dGyaup6+es6NZctta81vXzkJW2
-grp+Sv6WdVU/c5x/0bp+89PYInX9rNIRV5Hzbqzr59yLez2+ZUvZKvX4VlHXzznxXd2xWrKun/Mx
-N+tbaOav6+fsqc2etV6srp81RytV/dzzXr3V9XNGpbaTuFxdP+cD12szbspidf3myUpbVd6Duaqf
-rW05Z12/ZXjfe10/xzTJkC4jdal+nG/xmKMe3wrqWHWWrOun9WK1baV6SUvW9XOu6ifx/vJ1/Zxj
-BWv+1dT1syN2qaqfY8bQHHX9nPebLeXYAnX95jlFsHhdP/0J6tmqfovX45unuKZTPb4l2FDXCzLh
-krc3qHX9HOJfmn5xNu091PWb70adRev6OTvUqoRZsq6fmr9lmWCi9169hqSt6vo5mznkvOUK6vo5
-V/VbTT0+tyxcr/X4lotmafX4lqvrp/RinYU715kri7p+3pLhLWPjC9T1c06Gl+olLQ==
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- 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
- ]]>
- <![CDATA[
- nWInprXciqRRSKuJ6kpag2a5lFYvuAoS6303amm1FBrBZk3UiG1HYM9iuAlYWScnHZUcKSGSbOk/
-YGUCQQduyCVbNt40korIkQRpxJJRHWd0iSWq6RCxyknOCiSpwfomURNvGxN6Oc6TklS6lTG2ufQG
-+FXzjaFB84geJXnLQJfTbRYsr2joDJUT4c8noWoQndY0ujY7l/7/3iqSAE8OnSuttCkikmO51rJL
-gumQRW0aRFAlcdjeS0YUZv2bwHoy4Rr8M2OJlqdrtV7GEKlZ+R5ZYqFIrRyBq5+1BzuVC8uVa8IN
-XJrUkjEIOSdQ7Xa3QaSlY2QtWkbg60wpS5Jk2IS8g2GZeN9xRC3mEt1YbM8rcVQllxxBpFrDNx9O
-S66qwUmtLPnosLBqiyOI1KyhRVYRnSNgy3IerPWwvYVTeb8srejkqLPCfq2ckW5La5lIzZoGhUJJ
-pOly+2FTp/BE0s5zBKnkvW2dqola7GM6SZKTkdMY1owlaqhRPd0YIkn3h24gsVXKqc2CUUQNaZ4u
-m5k0T4DbjfXhNtLdveflutB0Ollbe7D1Yuc/9rdevdnZn7z4sPU/O93W3t7bg62DnXe8073Y3/lw
-8HZ/p/vw8u3v8oSPHJKvrd29/93k/wCIBNbC
- ]]>
-</i:pgf>
-</svg>
diff --git a/web/stream.gathering.org/resources/images/pixel-white.png b/web/stream.gathering.org/resources/images/pixel-white.png
deleted file mode 100644
index 259d96b..0000000
--- a/web/stream.gathering.org/resources/images/pixel-white.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/images/pixel_animation.gif b/web/stream.gathering.org/resources/images/pixel_animation.gif
deleted file mode 100644
index 5840442..0000000
--- a/web/stream.gathering.org/resources/images/pixel_animation.gif
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/images/thegathering.png b/web/stream.gathering.org/resources/images/thegathering.png
deleted file mode 100644
index da1752e..0000000
--- a/web/stream.gathering.org/resources/images/thegathering.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/images/vlc.png b/web/stream.gathering.org/resources/images/vlc.png
deleted file mode 100644
index 129ab76..0000000
--- a/web/stream.gathering.org/resources/images/vlc.png
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/resources/js/jwplayer.js b/web/stream.gathering.org/resources/js/jwplayer.js
deleted file mode 100644
index 41ade50..0000000
--- a/web/stream.gathering.org/resources/js/jwplayer.js
+++ /dev/null
@@ -1 +0,0 @@
-var jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="5.5.1641";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function(b){b.utils=function(){};b.utils.typeOf=function(d){var c=typeof d;if(c==="object"){if(d){if(d instanceof Array){c="array"}}else{c="null"}}return c};b.utils.extend=function(){var c=b.utils.extend["arguments"];if(c.length>1){for(var e=1;e<c.length;e++){for(var d in c[e]){c[0][d]=c[e][d]}}return c[0]}return null};b.utils.clone=function(f){var c;var d=b.utils.clone["arguments"];if(d.length==1){switch(b.utils.typeOf(d[0])){case"object":c={};for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;case"array":c=[];for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;default:return d[0];break}}return c};b.utils.extension=function(c){c=c.substring(c.lastIndexOf("/")+1,c.length);c=c.split("?")[0];if(c.lastIndexOf(".")>-1){return c.substr(c.lastIndexOf(".")+1,c.length).toLowerCase()}return};b.utils.html=function(c,d){c.innerHTML=d};b.utils.wrap=function(c,d){c.parentNode.replaceChild(d,c);d.appendChild(c)};b.utils.ajax=function(f,e,c){var d;if(window.XMLHttpRequest){d=new XMLHttpRequest()}else{d=new ActiveXObject("Microsoft.XMLHTTP")}d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e(d)}}else{if(c){c(f)}}}};d.open("GET",f,true);d.send(null);return d};b.utils.load=function(d,e,c){d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e()}}else{if(c){c()}}}}};b.utils.find=function(d,c){return d.getElementsByTagName(c)};b.utils.append=function(c,d){c.appendChild(d)};b.utils.isIE=function(){return((!+"\v1")||(typeof window.ActiveXObject!="undefined"))};b.utils.isLegacyAndroid=function(){var c=navigator.userAgent.toLowerCase();return(c.match(/android 2.[012]/i)!==null)};b.utils.isIOS=function(){var c=navigator.userAgent.toLowerCase();return(c.match(/iP(hone|ad)/i)!==null)};b.utils.getFirstPlaylistItemFromConfig=function(c){var d={};var e;if(c.playlist&&c.playlist.length){e=c.playlist[0]}else{e=c}d.file=e.file;d.levels=e.levels;d.streamer=e.streamer;d.playlistfile=e.playlistfile;if(d.file&&d.file.toLowerCase().indexOf("youtube.com")>-1){d.provider="youtube"}if(d.streamer&&d.streamer.toLowerCase().indexOf("rtmp://")==0){d.provider="rtmp"}if(e.type){d.provider=e.type.toLowerCase()}else{if(e.provider){d.provider=e.provider.toLowerCase()}}return d};b.utils.getOuterHTML=function(d){if(d.outerHTML){return d.outerHTML}else{var e=d.parentNode;var c=document.createElement(e.tagName);var g=document.createElement(d.tagName);e.replaceChild(g,d);c.appendChild(d);var f=c.innerHTML;e.replaceChild(d,g);return f}};b.utils.setOuterHTML=function(f,e){if(f.outerHTML){f.outerHTML=e}else{var g=document.createElement("div");g.innerHTML=e;var c=document.createRange();c.selectNodeContents(g);var d=c.extractContents();f.parentNode.insertBefore(d,f);f.parentNode.removeChild(f)}};b.utils.hasFlash=function(){return(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined")||(typeof window.ActiveXObject!="undefined")};b.utils.getPluginName=function(c){if(c.lastIndexOf("/")>=0){c=c.substring(c.lastIndexOf("/")+1,c.length)}if(c.lastIndexOf("-")>=0){c=c.substring(0,c.lastIndexOf("-"))}if(c.lastIndexOf(".swf")>=0){c=c.substring(0,c.lastIndexOf(".swf"))}if(c.lastIndexOf(".js")>=0){c=c.substring(0,c.lastIndexOf(".js"))}return c};b.utils.getAbsolutePath=function(j,h){if(h===undefined){h=document.location.href}if(j===undefined){return undefined}if(a(j)){return j}var k=h.substring(0,h.indexOf("://")+3);var g=h.substring(k.length,h.indexOf("/",k.length+1));var d;if(j.indexOf("/")===0){d=j.split("/")}else{var e=h.split("?")[0];e=e.substring(k.length+g.length+1,e.lastIndexOf("/"));d=e.split("/").concat(j.split("/"))}var c=[];for(var f=0;f<d.length;f++){if(!d[f]||d[f]===undefined||d[f]=="."){continue}else{if(d[f]==".."){c.pop()}else{c.push(d[f])}}}return k+g+"/"+c.join("/")};function a(d){if(d===null){return}var e=d.indexOf("://");var c=d.indexOf("?");return(e>0&&(c<0||(c>e)))}b.utils.pluginPathType={ABSOLUTE:"ABSOLUTE",RELATIVE:"RELATIVE",CDN:"CDN"};b.utils.getPluginPathType=function(d){if(typeof d!="string"){return}d=d.split("?")[0];var e=d.indexOf("://");if(e>0){return b.utils.pluginPathType.ABSOLUTE}var c=d.indexOf("/");var f=b.utils.extension(d);if(e<0&&c<0&&(!f||!isNaN(f))){return b.utils.pluginPathType.CDN}return b.utils.pluginPathType.RELATIVE};b.utils.mapEmpty=function(c){for(var d in c){return false}return true};b.utils.mapLength=function(d){var c=0;for(var e in d){c++}return c};b.utils.log=function(d,c){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(c){console.log(d,c)}else{console.log(d)}}};b.utils.css=function(d,g,c){if(d!==undefined){for(var e in g){try{if(typeof g[e]==="undefined"){continue}else{if(typeof g[e]=="number"&&!(e=="zIndex"||e=="opacity")){if(isNaN(g[e])){continue}if(e.match(/color/i)){g[e]="#"+b.utils.strings.pad(g[e].toString(16),6)}else{g[e]=Math.ceil(g[e])+"px"}}}d.style[e]=g[e]}catch(f){}}}};b.utils.isYouTube=function(c){return c.indexOf("youtube.com")>-1};b.utils.getYouTubeId=function(c){c.indexOf("youtube.com">0)};b.utils.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};b.utils.stretch=function(h,m,l,f,k,g){if(typeof l=="undefined"||typeof f=="undefined"||typeof k=="undefined"||typeof g=="undefined"){return}var d=l/k;var e=f/g;var j=0;var i=0;m.style.overflow="hidden";b.utils.transform(m,"");var c={};switch(h.toUpperCase()){case b.utils.stretching.NONE:c.width=k;c.height=g;break;case b.utils.stretching.UNIFORM:if(d>e){c.width=k*e;c.height=g*e}else{c.width=k*d;c.height=g*d}break;case b.utils.stretching.FILL:if(d>e){c.width=k*d;c.height=g*d}else{c.width=k*e;c.height=g*e}break;case b.utils.stretching.EXACTFIT:b.utils.transform(m,["scale(",d,",",e,")"," translate(0px,0px)"].join(""));c.width=k;c.height=g;break;default:break}c.top=(f-c.height)/2;c.left=(l-c.width)/2;b.utils.css(m,c)};b.utils.stretching={NONE:"NONE",FILL:"FILL",UNIFORM:"UNIFORM",EXACTFIT:"EXACTFIT"}})(jwplayer);(function(a){a.events=function(){};a.events.COMPLETE="COMPLETE";a.events.ERROR="ERROR"})(jwplayer);(function(jwplayer){jwplayer.events.eventdispatcher=function(debug){var _debug=debug;var _listeners;var _globallisteners;this.resetEventListeners=function(){_listeners={};_globallisteners=[]};this.resetEventListeners();this.addEventListener=function(type,listener,count){try{if(_listeners[type]===undefined){_listeners[type]=[]}if(typeof(listener)=="string"){eval("listener = "+listener)}_listeners[type].push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeEventListener=function(type,listener){try{for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){if(_listeners[type][lisenterIndex].toString()==listener.toString()){_listeners[type].slice(lisenterIndex,lisenterIndex+1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.addGlobalListener=function(listener,count){try{if(typeof(listener)=="string"){eval("listener = "+listener)}_globallisteners.push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeGlobalListener=function(listener){try{for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){if(_globallisteners[globalListenerIndex].toString()==listener.toString()){_globallisteners.slice(globalListenerIndex,globalListenerIndex+1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.sendEvent=function(type,data){if(data===undefined){data={}}if(_debug){jwplayer.utils.log(type,data)}if(typeof _listeners[type]!="undefined"){for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){try{_listeners[type][listenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_listeners[type][listenerIndex].listener)}if(_listeners[type][listenerIndex].count===1){delete _listeners[type][listenerIndex]}else{if(_listeners[type][listenerIndex].count>0){_listeners[type][listenerIndex].count=_listeners[type][listenerIndex].count-1}}}}for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){try{_globallisteners[globalListenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_globallisteners[globalListenerIndex].listener)}if(_globallisteners[globalListenerIndex].count===1){delete _globallisteners[globalListenerIndex]}else{if(_globallisteners[globalListenerIndex].count>0){_globallisteners[globalListenerIndex].count=_globallisteners[globalListenerIndex].count-1}}}}}})(jwplayer);(function(a){var b={};a.utils.animations=function(){};a.utils.animations.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};a.utils.animations.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d};a.utils.animations.rotate=function(c,d){a.utils.animations.transform(c,["rotate(",d,"deg)"].join(""))};a.utils.cancelAnimation=function(c){delete b[c.id]};a.utils.fadeTo=function(l,f,e,i,h,d){if(b[l.id]!=d&&d!==undefined){return}var c=new Date().getTime();if(d>c){setTimeout(function(){a.utils.fadeTo(l,f,e,i,0,d)},d-c)}l.style.display="block";if(i===undefined){i=l.style.opacity===""?1:l.style.opacity}if(l.style.opacity==f&&l.style.opacity!==""&&d!==undefined){if(f===0){l.style.display="none"}return}if(d===undefined){d=c;b[l.id]=d}if(h===undefined){h=0}var j=(c-d)/(e*1000);j=j>1?1:j;var k=f-i;var g=i+(j*k);if(g>1){g=1}else{if(g<0){g=0}}l.style.opacity=g;if(h>0){b[l.id]=d+h*1000;a.utils.fadeTo(l,f,e,i,0,b[l.id]);return}setTimeout(function(){a.utils.fadeTo(l,f,e,i,0,d)},10)}})(jwplayer);(function(a){a.utils.arrays=function(){};a.utils.arrays.indexOf=function(c,d){for(var b=0;b<c.length;b++){if(c[b]==d){return b}}return -1};a.utils.arrays.remove=function(c,d){var b=a.utils.arrays.indexOf(c,d);if(b>-1){c.splice(b,1)}}})(jwplayer);(function(a){a.utils.extensionmap={"3gp":{html5:"video/3gpp",flash:"video"},"3gpp":{html5:"video/3gpp"},"3g2":{html5:"video/3gpp2",flash:"video"},"3gpp2":{html5:"video/3gpp2"},flv:{flash:"video"},f4a:{html5:"audio/mp4"},f4b:{html5:"audio/mp4",flash:"video"},f4p:{html5:"video/mp4",flash:"video"},f4v:{html5:"video/mp4",flash:"video"},mov:{html5:"video/quicktime",flash:"video"},m4a:{html5:"audio/mp4",flash:"video"},m4b:{html5:"audio/mp4"},m4p:{html5:"audio/mp4"},m4v:{html5:"video/mp4",flash:"video"},mkv:{html5:"video/x-matroska"},mp4:{html5:"video/mp4",flash:"video"},rbs:{flash:"sound"},sdp:{html5:"application/sdp",flash:"video"},vp6:{html5:"video/x-vp6"},aac:{html5:"audio/aac",flash:"video"},mp3:{flash:"sound"},ogg:{html5:"audio/ogg"},ogv:{html5:"video/ogg"},webm:{html5:"video/webm"},m3u8:{html5:"audio/x-mpegurl"},gif:{flash:"image"},jpeg:{flash:"image"},jpg:{flash:"image"},swf:{flash:"image"},png:{flash:"image"}}})(jwplayer);(function(e){e.utils.mediaparser=function(){};var g={element:{width:"width",height:"height",id:"id","class":"className",name:"name"},media:{src:"file",preload:"preload",autoplay:"autostart",loop:"repeat",controls:"controls"},source:{src:"file",type:"type",media:"media","data-jw-width":"width","data-jw-bitrate":"bitrate"},video:{poster:"image"}};var f={};e.utils.mediaparser.parseMedia=function(i){return d(i)};function c(j,i){if(i===undefined){i=g[j]}else{e.utils.extend(i,g[j])}return i}function d(m,i){if(f[m.tagName.toLowerCase()]&&(i===undefined)){return f[m.tagName.toLowerCase()](m)}else{i=c("element",i);var n={};for(var j in i){if(j!="length"){var l=m.getAttribute(j);if(!(l===""||l===undefined||l===null)){n[i[j]]=m.getAttribute(j)}}}var k=m.style["#background-color"];if(k&&!(k=="transparent"||k=="rgba(0, 0, 0, 0)")){n.screencolor=k}return n}}function h(n,k){k=c("media",k);var l=[];var j=e.utils.selectors("source",n);for(var m in j){if(!isNaN(m)){l.push(a(j[m]))}}var o=d(n,k);if(o.file!==undefined){l[0]={file:o.file}}o.levels=l;return o}function a(k,j){j=c("source",j);var i=d(k,j);i.width=i.width?i.width:0;i.bitrate=i.bitrate?i.bitrate:0;return i}function b(k,j){j=c("video",j);var i=h(k,j);return i}f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);(function(a){a.utils.loaderstatus={NEW:"NEW",LOADING:"LOADING",ERROR:"ERROR",COMPLETE:"COMPLETE"};a.utils.scriptloader=function(c){var d=a.utils.loaderstatus.NEW;var b=new a.events.eventdispatcher();a.utils.extend(this,b);this.load=function(){if(d==a.utils.loaderstatus.NEW){d=a.utils.loaderstatus.LOADING;var e=document.createElement("script");e.onload=function(f){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)};e.onerror=function(f){d=a.utils.loaderstatus.ERROR;b.sendEvent(a.events.ERROR)};e.onreadystatechange=function(){if(e.readyState=="loaded"||e.readyState=="complete"){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)}};document.getElementsByTagName("head")[0].appendChild(e);e.src=c}};this.getStatus=function(){return d}}})(jwplayer);(function(a){a.utils.selectors=function(b,d){if(d===undefined){d=document}b=a.utils.strings.trim(b);var c=b.charAt(0);if(c=="#"){return d.getElementById(b.substr(1))}else{if(c=="."){if(d.getElementsByClassName){return d.getElementsByClassName(b.substr(1))}else{return a.utils.selectors.getElementsByTagAndClass("*",b.substr(1))}}else{if(b.indexOf(".")>0){selectors=b.split(".");return a.utils.selectors.getElementsByTagAndClass(selectors[0],selectors[1])}else{return d.getElementsByTagName(b)}}}return null};a.utils.selectors.getElementsByTagAndClass=function(e,h,g){elements=[];if(g===undefined){g=document}var f=g.getElementsByTagName(e);for(var d=0;d<f.length;d++){if(f[d].className!==undefined){var c=f[d].className.split(" ");for(var b=0;b<c.length;b++){if(c[b]==h){elements.push(f[d])}}}}return elements}})(jwplayer);(function(a){a.utils.strings=function(){};a.utils.strings.trim=function(b){return b.replace(/^\s*/,"").replace(/\s*$/,"")};a.utils.strings.pad=function(c,d,b){if(!b){b="0"}while(c.length<d){c=b+c}return c};a.utils.strings.serialize=function(b){if(b==null){return null}else{if(b=="true"){return true}else{if(b=="false"){return false}else{if(isNaN(Number(b))||b.length>5||b.length==0){return b}else{return Number(b)}}}}};a.utils.strings.seconds=function(d){d=d.replace(",",".");var b=d.split(":");var c=0;if(d.substr(-1)=="s"){c=Number(d.substr(0,d.length-1))}else{if(d.substr(-1)=="m"){c=Number(d.substr(0,d.length-1))*60}else{if(d.substr(-1)=="h"){c=Number(d.substr(0,d.length-1))*3600}else{if(b.length>1){c=Number(b[b.length-1]);c+=Number(b[b.length-2])*60;if(b.length==3){c+=Number(b[b.length-3])*3600}}else{c=Number(d)}}}}return c};a.utils.strings.xmlAttribute=function(b,c){for(var d in b.attributes){if(b.attributes[d].name&&b.attributes[d].name.toLowerCase()==c.toLowerCase()){return b.attributes[d].value.toString()}}return""}})(jwplayer);(function(c){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);c.utils.typechecker=function(g,f){f=f===null?b(g):f;return e(g,f)};function b(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(f===null){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){switch(f.toLowerCase()){case"blue":return parseInt("0000FF",16);case"green":return parseInt("00FF00",16);case"red":return parseInt("FF0000",16);case"cyan":return parseInt("00FFFF",16);case"magenta":return parseInt("FF00FF",16);case"yellow":return parseInt("FFFF00",16);case"black":return parseInt("000000",16);case"white":return parseInt("FFFFFF",16);default:f=f.replace(/(#|0x)?([0-9A-F]{3,6})$/gi,"$2");if(f.length==3){f=f.charAt(0)+f.charAt(0)+f.charAt(1)+f.charAt(1)+f.charAt(2)+f.charAt(2)}return parseInt(f,16)}return parseInt("000000",16)}})(jwplayer);(function(a){var c={};var b={};a.plugins=function(){};a.plugins.loadPlugins=function(e,d){b[e]=new a.plugins.pluginloader(new a.plugins.model(c),d);return b[e]};a.plugins.registerPlugin=function(g,e,d){if(c[g]){c[g].registerPlugin(g,e,d)}else{a.utils.log("A plugin ("+g+") was registered with the player that was not loaded. Please check your configuration.");for(var f in b){b[f].pluginFailed()}}}})(jwplayer);(function(a){a.plugins.model=function(b){this.addPlugin=function(c){var d=a.utils.getPluginName(c);if(!b[d]){b[d]=new a.plugins.plugin(c)}return b[d]}}})(jwplayer);(function(a){a.plugins.pluginmodes={FLASH:"FLASH",JAVASCRIPT:"JAVASCRIPT",HYBRID:"HYBRID"};a.plugins.plugin=function(b){var d="http://plugins.longtailvideo.com";var i=a.utils.loaderstatus.NEW;var j;var h;var k;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function e(){switch(a.utils.getPluginPathType(b)){case a.utils.pluginPathType.ABSOLUTE:return b;case a.utils.pluginPathType.RELATIVE:return a.utils.getAbsolutePath(b,window.location.href);case a.utils.pluginPathType.CDN:var l=a.utils.getPluginName(b);return d+"/"+a.version.split(".")[0]+"/"+l+"/"+l+".js"}}function g(l){k=setTimeout(function(){i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)},1000)}function f(l){i=a.utils.loaderstatus.ERROR;c.sendEvent(a.events.ERROR)}this.load=function(){if(i==a.utils.loaderstatus.NEW){if(b.lastIndexOf(".swf")>0){j=b;i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE);return}i=a.utils.loaderstatus.LOADING;var l=new a.utils.scriptloader(e());l.addEventListener(a.events.COMPLETE,g);l.addEventListener(a.events.ERROR,f);l.load()}};this.registerPlugin=function(n,m,l){if(k){clearTimeout(k);k=undefined}if(m&&l){j=l;h=m}else{if(typeof m=="string"){j=m}else{if(typeof m=="function"){h=m}else{if(!m&&!l){j=n}}}}i=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)};this.getStatus=function(){return i};this.getPluginName=function(){return a.utils.getPluginName(b)};this.getFlashPath=function(){if(j){switch(a.utils.getPluginPathType(j)){case a.utils.pluginPathType.ABSOLUTE:return j;case a.utils.pluginPathType.RELATIVE:if(b.lastIndexOf(".swf")>0){return a.utils.getAbsolutePath(j,window.location.href)}return a.utils.getAbsolutePath(j,e());case a.utils.pluginPathType.CDN:if(j.indexOf("-")>-1){return j+"h"}return j+"-h"}}return null};this.getJS=function(){return h};this.getPluginmode=function(){if(typeof j!="undefined"&&typeof h!="undefined"){return a.plugins.pluginmodes.HYBRID}else{if(typeof j!="undefined"){return a.plugins.pluginmodes.FLASH}else{if(typeof h!="undefined"){return a.plugins.pluginmodes.JAVASCRIPT}}}};this.getNewInstance=function(m,l,n){return new h(m,l,n)};this.getURL=function(){return b}}})(jwplayer);(function(a){a.plugins.pluginloader=function(h,e){var g={};var j=a.utils.loaderstatus.NEW;var d=false;var b=false;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function f(){if(!b){b=true;j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)}}function i(){if(!b){var k=0;for(plugin in g){if(g[plugin].getStatus()==a.utils.loaderstatus.LOADING){k++}}if(k==0){f()}}}this.setupPlugins=function(m,k,r){var l={length:0,plugins:{}};var o={length:0,plugins:{}};for(var n in g){var p=g[n].getPluginName();if(g[n].getFlashPath()){l.plugins[g[n].getFlashPath()]=k.plugins[n];l.plugins[g[n].getFlashPath()].pluginmode=g[n].getPluginmode();l.length++}if(g[n].getJS()){var q=document.createElement("div");q.id=m.id+"_"+p;q.style.position="absolute";q.style.zIndex=o.length+10;o.plugins[p]=g[n].getNewInstance(m,k.plugins[n],q);o.length++;if(typeof o.plugins[p].resize!="undefined"){m.onReady(r(o.plugins[p],q,true));m.onResize(r(o.plugins[p],q))}}}m.plugins=o.plugins;return l};this.load=function(){j=a.utils.loaderstatus.LOADING;d=true;for(var k in e){g[k]=h.addPlugin(k);g[k].addEventListener(a.events.COMPLETE,i);g[k].addEventListener(a.events.ERROR,i);g[k].load()}d=false;i()};this.pluginFailed=function(){f()};this.getStatus=function(){return j}}})(jwplayer);(function(b){var a=[];b.api=function(d){this.container=d;this.id=d.id;var l={};var q={};var c=[];var h=undefined;var k=false;var i=[];var o=b.utils.getOuterHTML(d);var p={};var m=0;var j={};this.getBuffer=function(){return this.callInternal("jwGetBuffer")};this.getContainer=function(){return this.container};function e(r){return function(w,s,t,u){var v;if(s){j[w]=s;v="jwplayer('"+r+"').callback('"+w+"')"}else{if(!s&&j[w]){delete j[w]}}h.jwDockSetButton(w,v,t,u)}}this.getPlugin=function(s){var r=this.callInternal;if(s=="dock"){return{setButton:e(this.id)}}return this.plugins[s]};this.callback=function(r){if(j[r]){return j[r]()}};this.getDuration=function(){return this.callInternal("jwGetDuration")};this.getFullscreen=function(){return this.callInternal("jwGetFullscreen")};this.getHeight=function(){return this.callInternal("jwGetHeight")};this.getLockState=function(){return this.callInternal("jwGetLockState")};this.getMeta=function(){return this.getItemMeta()};this.getMute=function(){return this.callInternal("jwGetMute")};this.getPlaylist=function(){var s=this.callInternal("jwGetPlaylist");for(var r=0;r<s.length;r++){if(s[r].index===undefined){s[r].index=r}}return s};this.getPlaylistItem=function(r){if(r===undefined){r=this.getCurrentItem()}return this.getPlaylist()[r]};this.getPosition=function(){return this.callInternal("jwGetPosition")};this.getRenderingMode=function(){return this.renderingMode};this.getState=function(){return this.callInternal("jwGetState")};this.getVolume=function(){return this.callInternal("jwGetVolume")};this.getWidth=function(){return this.callInternal("jwGetWidth")};this.setFullscreen=function(r){if(r===undefined){this.callInternal("jwSetFullscreen",!this.callInternal("jwGetFullscreen"))}else{this.callInternal("jwSetFullscreen",r)}return this};this.setMute=function(r){if(r===undefined){this.callInternal("jwSetMute",!this.callInternal("jwGetMute"))}else{this.callInternal("jwSetMute",r)}return this};this.lock=function(){return this};this.unlock=function(){return this};this.load=function(r){this.callInternal("jwLoad",r);return this};this.playlistItem=function(r){this.callInternal("jwPlaylistItem",r);return this};this.playlistPrev=function(){this.callInternal("jwPlaylistPrev");return this};this.playlistNext=function(){this.callInternal("jwPlaylistNext");return this};this.resize=function(s,r){if(this.renderingMode=="html5"){h.jwResize(s,r)}else{this.container.width=s;this.container.height=r}return this};this.play=function(r){if(typeof r=="undefined"){r=this.getState();if(r==b.api.events.state.PLAYING||r==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPlay",r)}return this};this.pause=function(r){if(typeof r=="undefined"){r=this.getState();if(r==b.api.events.state.PLAYING||r==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPause",r)}return this};this.stop=function(){this.callInternal("jwStop");return this};this.seek=function(r){this.callInternal("jwSeek",r);return this};this.setVolume=function(r){this.callInternal("jwSetVolume",r);return this};this.onBufferChange=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER,r)};this.onBufferFull=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,r)};this.onError=function(r){return this.eventListener(b.api.events.JWPLAYER_ERROR,r)};this.onFullscreen=function(r){return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN,r)};this.onMeta=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_META,r)};this.onMute=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE,r)};this.onPlaylist=function(r){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,r)};this.onPlaylistItem=function(r){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,r)};this.onReady=function(r){return this.eventListener(b.api.events.API_READY,r)};this.onResize=function(r){return this.eventListener(b.api.events.JWPLAYER_RESIZE,r)};this.onComplete=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,r)};this.onTime=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME,r)};this.onVolume=function(r){return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME,r)};this.onBuffer=function(r){return this.stateListener(b.api.events.state.BUFFERING,r)};this.onPause=function(r){return this.stateListener(b.api.events.state.PAUSED,r)};this.onPlay=function(r){return this.stateListener(b.api.events.state.PLAYING,r)};this.onIdle=function(r){return this.stateListener(b.api.events.state.IDLE,r)};this.remove=function(){l={};i=[];if(b.utils.getOuterHTML(this.container)!=o){b.api.destroyPlayer(this.id,o)}};this.setup=function(s){if(b.embed){var r=this.id;this.remove();var t=b(r);t.config=s;return new b.embed(t)}return this};this.registerPlugin=function(t,s,r){b.plugins.registerPlugin(t,s,r)};this.setPlayer=function(r,s){h=r;this.renderingMode=s};this.stateListener=function(r,s){if(!q[r]){q[r]=[];this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE,g(r))}q[r].push(s);return this};function g(r){return function(t){var s=t.newstate,v=t.oldstate;if(s==r){var u=q[s];if(u){for(var w=0;w<u.length;w++){if(typeof u[w]=="function"){u[w].call(this,{oldstate:v,newstate:s})}}}}}}this.addInternalListener=function(r,s){r.jwAddEventListener(s,'function(dat) { jwplayer("'+this.id+'").dispatchEvent("'+s+'", dat); }')};this.eventListener=function(r,s){if(!l[r]){l[r]=[];if(h&&k){this.addInternalListener(h,r)}}l[r].push(s);return this};this.dispatchEvent=function(t){if(l[t]){var s=f(t,arguments[1]);for(var r=0;r<l[t].length;r++){if(typeof l[t][r]=="function"){l[t][r].call(this,s)}}}};function f(t,r){var v=b.utils.extend({},r);if(t==b.api.events.JWPLAYER_FULLSCREEN&&!v.fullscreen){v.fullscreen=v.message=="true"?true:false;delete v.message}else{if(typeof v.data=="object"){v=b.utils.extend(v,v.data);delete v.data}}var s=["position","duration","offset"];for(var u in s){if(v[s[u]]){v[s[u]]=Math.round(v[s[u]]*1000)/1000}}return v}this.callInternal=function(s,r){if(k){if(typeof h!="undefined"&&typeof h[s]=="function"){if(r!==undefined){return(h[s])(r)}else{return(h[s])()}}return null}else{i.push({method:s,parameters:r})}};this.playerReady=function(t){k=true;if(!h){this.setPlayer(document.getElementById(t.id))}this.container=document.getElementById(this.id);for(var r in l){this.addInternalListener(h,r)}this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,function(u){if(u.index!==undefined){m=u.index}p={}});this.eventListener(b.api.events.JWPLAYER_MEDIA_META,function(u){b.utils.extend(p,u.metadata)});this.dispatchEvent(b.api.events.API_READY);while(i.length>0){var s=i.shift();this.callInternal(s.method,s.parameters)}};this.getItemMeta=function(){return p};this.getCurrentItem=function(){return m};function n(t,v,u){var r=[];if(!v){v=0}if(!u){u=t.length-1}for(var s=v;s<=u;s++){r.push(t[s])}return r}return this};b.api.selectPlayer=function(d){var c;if(d===undefined){d=0}if(d.nodeType){c=d}else{if(typeof d=="string"){c=document.getElementById(d)}}if(c){var e=b.api.playerById(c.id);if(e){return e}else{return b.api.addPlayer(new b.api(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem"};b.api.events.state={BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING"};b.api.playerById=function(d){for(var c=0;c<a.length;c++){if(a[c].id==d){return a[c]}}return null};b.api.addPlayer=function(c){for(var d=0;d<a.length;d++){if(a[d]==c){return c}}a.push(c);return c};b.api.destroyPlayer=function(g,d){var f=-1;for(var i=0;i<a.length;i++){if(a[i].id==g){f=i;continue}}if(f>=0){var c=document.getElementById(a[f].id);if(document.getElementById(a[f].id+"_wrapper")){c=document.getElementById(a[f].id+"_wrapper")}if(c){if(d){b.utils.setOuterHTML(c,d)}else{var h=document.createElement("div");var e=c.id;if(c.id.indexOf("_wrapper")==c.id.length-8){newID=c.id.substring(0,c.id.length-8)}h.setAttribute("id",e);c.parentNode.replaceChild(h,c)}}a.splice(f,1)}return null};b.getPlayers=function(){return a.slice(0)}})(jwplayer);var _userPlayerReady=(typeof playerReady=="function")?playerReady:undefined;playerReady=function(b){var a=jwplayer.api.playerById(b.id);if(a){a.playerReady(b)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){a.embed=function(g){var i={width:400,height:300,components:{controlbar:{position:"over"}}};var f=a.utils.mediaparser.parseMedia(g.container);var e=new a.embed.config(a.utils.extend(i,f,g.config),this);var h=a.plugins.loadPlugins(g.id,e.plugins);function c(l,k){for(var j in k){if(typeof l[j]=="function"){(l[j]).call(l,k[j])}}}function d(){if(h.getStatus()==a.utils.loaderstatus.COMPLETE){for(var l=0;l<e.modes.length;l++){if(e.modes[l].type&&a.embed[e.modes[l].type]){var j=e;if(e.modes[l].config){j=a.utils.extend(a.utils.clone(e),e.modes[l].config)}var k=new a.embed[e.modes[l].type](document.getElementById(g.id),e.modes[l],j,h,g);if(k.supportsConfig()){k.embed();c(g,e.events);return g}}}a.utils.log("No suitable players found");new a.embed.logo(a.utils.extend({hide:true},e.components.logo),"none",g.id)}}h.addEventListener(a.events.COMPLETE,d);h.addEventListener(a.events.ERROR,d);h.load();return g};function b(){if(!document.body){return setTimeout(b,15)}var c=a.utils.selectors.getElementsByTagAndClass("video","jwplayer");for(var d=0;d<c.length;d++){var e=c[d];a(e.id).setup({})}}b()})(jwplayer);(function(a){function b(){return[{type:"flash",src:"/jwplayer/player.swf"},{type:"html5"},{type:"download"}]}function d(h){var g=h.toLowerCase();var f=["left","right","top","bottom"];for(var e=0;e<f.length;e++){if(g==f[e]){return true}}return false}function c(f){var e=false;e=(f instanceof Array)||(typeof f=="object"&&!f.position&&!f.size);return e}a.embed.config=function(f,p){var o=a.utils.extend({},f);var m;if(c(o.playlist)){m=o.playlist;delete o.playlist}for(var i in o){if(i.indexOf(".")>-1){var q=i.split(".");var r=o;for(var e=0;e<q.length;e++){if(e==q.length-1){if(a.utils.typeOf(r)=="object"){r[q[e]]=o[i];delete o[i]}}else{if(r[q[e]]===undefined){r[q[e]]={}}r=r[q[e]]}}}}if(typeof o.plugins=="string"){var g=o.plugins.split(",");if(typeof o.plugins!="object"){o.plugins={}}for(var k=0;k<g.length;k++){var l=a.utils.getPluginName(g[k]);if(typeof o[l]=="object"){o.plugins[g[k]]=o[l];delete o[l]}else{o.plugins[g[k]]={}}}}var j=["playlist","dock","controlbar"];for(var n=0;n<j.length;n++){if(typeof o[j[n]]=="string"){if(!o.components[j[n]]){o.components[j[n]]={}}o.components[j[n]].position=o[j[n]];delete o[j[n]]}else{if(o[j[n]]){o.components[j[n]]=o[j[n]];delete o[j[n]]}}if(typeof o[j[n]+"size"]!="undefined"){if(!o.components[j[n]]){o.components[j[n]]={}}o.components[j[n]].size=o[j[n]+"size"];delete o[j[n]+"size"]}}if(typeof o.icons!="undefined"){if(!o.components.display){o.components.display={}}o.components.display.icons=o.icons;delete o.icons}if(o.players){o.modes=o.players;delete o.players}var h;if(o.flashplayer&&!o.modes){h=b();h[0].src=o.flashplayer;delete o.flashplayer}else{if(o.modes){if(typeof o.modes=="string"){h=b();h[0].src=o.modes}else{if(o.modes instanceof Array){h=o.modes}else{if(typeof o.modes=="object"&&o.modes.type){h=[o.modes]}}}delete o.modes}else{h=b()}}o.modes=h;if(m){o.playlist=m}return o}})(jwplayer);(function(a){a.embed.download=function(c,g,b,d,f){this.embed=function(){var j=a.utils.extend({},b);var p={};var i=b.width?b.width:480;if(typeof i!="number"){i=parseInt(i,10)}var l=b.height?b.height:320;if(typeof l!="number"){l=parseInt(l,10)}var t,n,m;var r={};if(b.playlist&&b.playlist.length){r.file=b.playlist[0].file;n=b.playlist[0].image;r.levels=b.playlist[0].levels}else{r.file=b.file;n=b.image;r.levels=b.levels}if(r.file){t=r.file}else{if(r.levels&&r.levels.length){t=r.levels[0].file}}m=t?"pointer":"auto";var k={display:{style:{cursor:m,width:i,height:l,backgroundColor:"#000",position:"relative",textDecoration:"none",border:"none",display:"block"}},display_icon:{style:{cursor:m,position:"absolute",display:t?"block":"none",top:0,left:0,border:0,margin:0,padding:0,zIndex:3,width:50,height:50,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg==)"}},display_iconBackground:{style:{cursor:m,position:"absolute",display:t?"block":"none",top:((l-50)/2),left:((i-50)/2),border:0,width:50,height:50,margin:0,padding:0,zIndex:2,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC)"}},display_image:{style:{width:i,height:l,display:n?"block":"none",position:"absolute",cursor:m,left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1,border:"none"}}};var h=function(u,w,x){var v=document.createElement(u);if(x){v.id=x}else{v.id=c.id+"_jwplayer_"+w}a.utils.css(v,k[w].style);return v};p.display=h("a","display",c.id);if(t){p.display.setAttribute("href",a.utils.getAbsolutePath(t))}p.display_image=h("img","display_image");p.display_image.setAttribute("alt","Click to download...");if(n){p.display_image.setAttribute("src",a.utils.getAbsolutePath(n))}if(true){p.display_icon=h("div","display_icon");p.display_iconBackground=h("div","display_iconBackground");p.display.appendChild(p.display_image);p.display_iconBackground.appendChild(p.display_icon);p.display.appendChild(p.display_iconBackground)}_css=a.utils.css;_hide=function(u){_css(u,{display:"none"})};function q(u){_imageWidth=p.display_image.naturalWidth;_imageHeight=p.display_image.naturalHeight;s()}function s(){a.utils.stretch(a.utils.stretching.UNIFORM,p.display_image,i,l,_imageWidth,_imageHeight)}p.display_image.onerror=function(u){_hide(p.display_image)};p.display_image.onload=q;c.parentNode.replaceChild(p.display,c);var o=(b.plugins&&b.plugins.logo)?b.plugins.logo:{};p.display.appendChild(new a.embed.logo(b.components.logo,"download",c.id));f.container=document.getElementById(f.id);f.setPlayer(p.display,"download")};this.supportsConfig=function(){if(b){var j=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof j.file=="undefined"&&typeof j.levels=="undefined"){return true}else{if(j.file){return e(j.file,j.provider,j.playlistfile)}else{if(j.levels&&j.levels.length){for(var h=0;h<j.levels.length;h++){if(j.levels[h].file&&e(j.levels[h].file,j.provider,j.playlistfile)){return true}}}}}}else{return true}};function e(i,k,h){if(h){return false}var j=["image","sound","youtube","http"];if(k&&(j.toString().indexOf(k)>-1)){return true}if(!k||(k&&k=="video")){var l=a.utils.extension(i);if(l&&a.utils.extensionmap[l]){return true}}return false}}})(jwplayer);(function(a){a.embed.flash=function(g,h,l,f,j){function m(o,n,p){var q=document.createElement("param");q.setAttribute("name",n);q.setAttribute("value",p);o.appendChild(q)}function k(o,p,n){return function(q){if(n){document.getElementById(j.id+"_wrapper").appendChild(p)}var s=document.getElementById(j.id).getPluginConfig("display");o.resize(s.width,s.height);var r={left:s.x,top:s.y};a.utils.css(p,r)}}function e(p){if(!p){return{}}var r={};for(var o in p){var n=p[o];for(var q in n){r[o+"."+q]=n[q]}}return r}function i(q,p){if(q[p]){var s=q[p];for(var o in s){var n=s[o];if(typeof n=="string"){if(!q[o]){q[o]=n}}else{for(var r in n){if(!q[o+"."+r]){q[o+"."+r]=n[r]}}}}delete q[p]}}function c(q){if(!q){return{}}var t={},s=[];for(var n in q){var p=a.utils.getPluginName(n);var o=q[n];s.push(n);for(var r in o){t[p+"."+r]=o[r]}}t.plugins=s.join(",");return t}function d(p){var n=p.netstreambasepath?"":"netstreambasepath="+encodeURIComponent(window.location.href)+"&";for(var o in p){n+=o+"="+encodeURIComponent(p[o])+"&"}return n.substring(0,n.length-1)}function b(n){return function(p){if(n.playlist){this.load(n.playlist)}else{if(n.levels){var o=this.getPlaylistItem(0);if(!o){o=n}if(!o.image){o.image=n.image}if(!o.levels){o.levels=n.levels}this.load(o)}}}}this.embed=function(){if(l.levels||l.playlist){j.onReady(b(l))}l.id=j.id;var y;if(g.id+"_wrapper"==g.parentNode.id){y=document.getElementById(g.id+"_wrapper")}else{y=document.createElement("div");y.id=g.id+"_wrapper";a.utils.wrap(g,y);y.style.position="relative"}var q=a.utils.extend({},l);var o=f.setupPlugins(j,q,k);if(o.length>0){a.utils.extend(q,c(o.plugins))}else{delete q.plugins}var n=q.width;var w=q.height;var r=["height","width","levels","playlist","modes","events"];for(var u=0;u<r.length;u++){delete q[r[u]]}var p="opaque";if(q.wmode){p=q.wmode}i(q,"components");i(q,"providers");var x="#000000";var t;if(a.utils.isIE()){var v='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" bgcolor="'+x+'" width="'+n+'" height="'+w+'" id="'+g.id+'" name="'+g.id+'">';v+='<param name="movie" value="'+h.src+'">';v+='<param name="allowfullscreen" value="true">';v+='<param name="allowscriptaccess" value="always">';v+='<param name="seamlesstabbing" value="true">';v+='<param name="wmode" value="'+p+'">';v+='<param name="flashvars" value="'+d(q)+'">';v+="</object>";a.utils.setOuterHTML(g,v);t=document.getElementById(g.id)}else{var s=document.createElement("object");s.setAttribute("type","application/x-shockwave-flash");s.setAttribute("data",h.src);s.setAttribute("width",n);s.setAttribute("height",w);s.setAttribute("bgcolor","#000000");s.setAttribute("id",g.id);s.setAttribute("name",g.id);m(s,"allowfullscreen","true");m(s,"allowscriptaccess","always");m(s,"seamlesstabbing","true");m(s,"wmode",p);m(s,"flashvars",d(q));g.parentNode.replaceChild(s,g);t=s}j.container=t;j.setPlayer(t,"flash")};this.supportsConfig=function(){if(a.utils.hasFlash()){if(l){var o=a.utils.getFirstPlaylistItemFromConfig(l);if(typeof o.file=="undefined"&&typeof o.levels=="undefined"){return true}else{if(o.file){return flashCanPlay(o.file,o.provider)}else{if(o.levels&&o.levels.length){for(var n=0;n<o.levels.length;n++){if(o.levels[n].file&&flashCanPlay(o.levels[n].file,o.provider)){return true}}}}}}else{return true}}return false};flashCanPlay=function(n,p){var o=["video","http","sound","image"];if(p&&(o.toString().indexOf(p<0))){return true}var q=a.utils.extension(n);if(!q){return true}if(a.utils.extensionmap[q]!==undefined&&a.utils.extensionmap[q].flash===undefined){return false}return true}}})(jwplayer);(function(a){a.embed.html5=function(c,g,b,d,f){function e(i,j,h){return function(k){var l=document.getElementById(c.id+"_displayarea");if(h){l.appendChild(j)}var m=l.style;i.resize(parseInt(m.width.replace("px","")),parseInt(m.height.replace("px","")));j.left=m.left;j.top=m.top}}this.embed=function(){if(a.html5){d.setupPlugins(f,b,e);c.innerHTML="";var j=a.utils.extend({screencolor:"0x000000"},b);var h=["plugins","modes","events"];for(var k=0;k<h.length;k++){delete j[h[k]]}if(j.levels&&!j.sources){j.sources=b.levels}if(j.skin&&j.skin.toLowerCase().indexOf(".zip")>0){j.skin=j.skin.replace(/\.zip/i,".xml")}var l=new (a.html5(c)).setup(j);f.container=document.getElementById(f.id);f.setPlayer(l,"html5")}else{return null}};this.supportsConfig=function(){var h=document.createElement("video");if(!!h.canPlayType){if(b){var k=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof k.file=="undefined"&&typeof k.levels=="undefined"){return true}else{if(k.file){return html5CanPlay(h,k.file,k.provider,k.playlistfile)}else{if(k.levels&&k.levels.length){for(var j=0;j<k.levels.length;j++){if(k.levels[j].file&&html5CanPlay(h,k.levels[j].file,k.provider,k.playlistfile)){return true}}}}}}else{return true}}return false};html5CanPlay=function(j,i,k,h){if(h){return false}if(k&&k=="youtube"){return true}if(k&&k!="video"&&k!="http"){return false}var l=a.utils.extension(i);if(!l||a.utils.extensionmap[l]===undefined){return true}if(a.utils.extensionmap[l].html5===undefined){return false}if(a.utils.isLegacyAndroid()&&l.match(/m4v|mp4/)){return true}return browserCanPlay(j,a.utils.extensionmap[l].html5)};browserCanPlay=function(i,h){if(!h){return true}return i.canPlayType(h)}}})(jwplayer);(function(a){a.embed.logo=function(l,k,d){var i={prefix:"http://l.longtailvideo.com/"+k+"/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:3,hide:false,position:"bottom-left"};_css=a.utils.css;var b;var h;j();function j(){n();c();f()}function n(){if(i.prefix){var p=a.version.split(/\W/).splice(0,2).join("/");if(i.prefix.indexOf(p)<0){i.prefix+=p+"/"}}h=a.utils.extend({},i)}function o(){var r={border:"none",textDecoration:"none",position:"absolute",cursor:"pointer",zIndex:10};r.display=h.hide?"none":"block";var q=h.position.toLowerCase().split("-");for(var p in q){r[q[p]]=h.margin}return r}function c(){b=document.createElement("img");b.id=d+"_jwplayer_logo";b.style.display="none";b.onload=function(p){_css(b,o());e()};if(!h.file){return}if(h.file.indexOf("http://")===0){b.src=h.file}else{b.src=h.prefix+h.file}}if(!h.file){return}function f(){if(h.link){b.onmouseover=g;b.onmouseout=e;b.onclick=m}else{this.mouseEnabled=false}}function m(p){if(typeof p!="undefined"){p.preventDefault();p.stopPropagation()}if(h.link){window.open(h.link,"_blank")}return}function e(p){if(h.link){b.style.opacity=h.out}return}function g(p){if(h.hide){b.style.opacity=h.over}return}return b}})(jwplayer);(function(a){a.html5=function(b){var c=b;this.setup=function(d){a.utils.extend(this,new a.html5.api(c,d));return this};return this}})(jwplayer);(function(b){var c=b.utils.css;b.html5.view=function(p,o,e){var s=p;var l=o;var v=e;var u;var f;var z;var q;var A;var n;function x(){u=document.createElement("div");u.id=l.id;u.className=l.className;_videowrapper=document.createElement("div");_videowrapper.id=u.id+"_video_wrapper";l.id=u.id+"_video";c(u,{position:"relative",height:v.height,width:v.width,padding:0,backgroundColor:B(),zIndex:0});function B(){if(s.skin.getComponentSettings("display")&&s.skin.getComponentSettings("display").backgroundcolor){return s.skin.getComponentSettings("display").backgroundcolor}return parseInt("000000",16)}c(l,{width:v.width,height:v.height,top:0,left:0,zIndex:1,margin:"auto",display:"block"});c(_videowrapper,{overflow:"hidden",position:"absolute",top:0,left:0,bottom:0,right:0});b.utils.wrap(l,u);b.utils.wrap(l,_videowrapper);q=document.createElement("div");q.id=u.id+"_displayarea";u.appendChild(q)}function j(){for(var B=0;B<v.plugins.order.length;B++){var C=v.plugins.order[B];if(v.plugins.object[C].getDisplayElement!==undefined){v.plugins.object[C].height=h(v.plugins.object[C].getDisplayElement().style.height);v.plugins.object[C].width=h(v.plugins.object[C].getDisplayElement().style.width);v.plugins.config[C].currentPosition=v.plugins.config[C].position}}t()}function t(C){if(v.getMedia()!==undefined){for(var B=0;B<v.plugins.order.length;B++){var D=v.plugins.order[B];if(v.plugins.object[D].getDisplayElement!==undefined){if(v.getMedia().hasChrome()){v.plugins.config[D].currentPosition=b.html5.view.positions.NONE}else{v.plugins.config[D].currentPosition=v.plugins.config[D].position}}}}i(v.width,v.height)}function h(B){if(typeof B=="string"){if(B===""){return 0}else{if(B.lastIndexOf("%")>-1){return B}else{return parseInt(B.replace("px",""),10)}}}return B}this.setup=function(B){l=B;x();j();s.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_LOADED,t);s.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_META,function(){w()});var C;if(window.onresize!==null){C=window.onresize}window.onresize=function(D){if(C!==undefined){try{C(D)}catch(F){}}if(s.jwGetFullscreen()){var E=document.body.getBoundingClientRect();v.width=Math.abs(E.left)+Math.abs(E.right);v.height=window.innerHeight}i(v.width,v.height)}};function g(B){switch(B.keyCode){case 27:if(s.jwGetFullscreen()){s.jwSetFullscreen(false)}break;case 32:if(s.jwGetState()!=b.api.events.state.IDLE&&s.jwGetState()!=b.api.events.state.PAUSED){s.jwPause()}else{s.jwPlay()}break}}function i(E,B){if(u.style.display=="none"){return}var D=[].concat(v.plugins.order);D.reverse();A=D.length+2;if(!v.fullscreen){v.width=E;v.height=B;f=E;z=B;c(q,{top:0,bottom:0,left:0,right:0,width:E,height:B});c(u,{height:z,width:f});var C=m(r,D);if(C.length>0){A+=C.length;m(k,C,true)}}else{if(navigator.vendor.indexOf("Apple")!==0){m(y,D,true)}}w()}function m(G,D,E){var C=[];for(var B=0;B<D.length;B++){var H=D[B];if(v.plugins.object[H].getDisplayElement!==undefined){if(v.plugins.config[H].currentPosition!=b.html5.view.positions.NONE){var F=G(H,A--);if(!F){C.push(H)}else{v.plugins.object[H].resize(F.width,F.height);if(E){delete F.width;delete F.height}c(v.plugins.object[H].getDisplayElement(),F)}}else{c(v.plugins.object[H].getDisplayElement(),{display:"none"})}}}return C}function r(C,D){if(v.plugins.object[C].getDisplayElement!==undefined){if(v.plugins.config[C].position&&a(v.plugins.config[C].position)){if(v.plugins.object[C].getDisplayElement().parentNode===null){u.appendChild(v.plugins.object[C].getDisplayElement())}var B=d(C);B.zIndex=D;return B}}return false}function k(D,E){if(v.plugins.object[D].getDisplayElement().parentNode===null){q.appendChild(v.plugins.object[D].getDisplayElement())}var B=v.width,C=v.height;if(typeof v.width=="string"&&v.width.lastIndexOf("%")>-1){percentage=parseFloat(v.width.substring(0,v.width.lastIndexOf("%")))/100;B=Math.round(window.innerWidth*percentage)}if(typeof v.height=="string"&&v.height.lastIndexOf("%")>-1){percentage=parseFloat(v.height.substring(0,v.height.lastIndexOf("%")))/100;C=Math.round(window.innerHeight*percentage)}return{position:"absolute",width:(B-h(q.style.left)-h(q.style.right)),height:(C-h(q.style.top)-h(q.style.bottom)),zIndex:E}}function y(B,C){return{position:"fixed",width:v.width,height:v.height,zIndex:C}}function w(){q.style.position="absolute";v.getMedia().getDisplayElement().style.position="absolute";if(v.getMedia().getDisplayElement().videoWidth==0||v.getMedia().getDisplayElement().videoHeight==0){return}var B,D;if(q.style.width.toString().lastIndexOf("%")>-1||q.style.width.toString().lastIndexOf("%")>-1){var C=q.getBoundingClientRect();B=Math.abs(C.left)+Math.abs(C.right);D=Math.abs(C.top)+Math.abs(C.bottom)}else{B=h(q.style.width);D=h(q.style.height)}b.utils.stretch(s.jwGetStretching(),v.getMedia().getDisplayElement(),B,D,v.getMedia().getDisplayElement().videoWidth,v.getMedia().getDisplayElement().videoHeight)}function d(C){var D={position:"absolute",margin:0,padding:0,top:null};var B=v.plugins.config[C].currentPosition.toLowerCase();switch(B.toUpperCase()){case b.html5.view.positions.TOP:D.top=h(q.style.top);D.left=h(q.style.left);D.width=f-h(q.style.left)-h(q.style.right);D.height=v.plugins.object[C].height;q.style[B]=h(q.style[B])+v.plugins.object[C].height+"px";q.style.height=h(q.style.height)-D.height+"px";break;case b.html5.view.positions.RIGHT:D.top=h(q.style.top);D.right=h(q.style.right);D.width=D.width=v.plugins.object[C].width;D.height=z-h(q.style.top)-h(q.style.bottom);q.style[B]=h(q.style[B])+v.plugins.object[C].width+"px";q.style.width=h(q.style.width)-D.width+"px";break;case b.html5.view.positions.BOTTOM:D.bottom=h(q.style.bottom);D.left=h(q.style.left);D.width=f-h(q.style.left)-h(q.style.right);D.height=v.plugins.object[C].height;q.style[B]=h(q.style[B])+v.plugins.object[C].height+"px";q.style.height=h(q.style.height)-D.height+"px";break;case b.html5.view.positions.LEFT:D.top=h(q.style.top);D.left=h(q.style.left);D.width=v.plugins.object[C].width;D.height=z-h(q.style.top)-h(q.style.bottom);q.style[B]=h(q.style[B])+v.plugins.object[C].width+"px";q.style.width=h(q.style.width)-D.width+"px";break;default:break}return D}this.resize=i;this.fullscreen=function(E){if(navigator.vendor.indexOf("Apple")===0){if(v.getMedia().getDisplayElement().webkitSupportsFullscreen){if(E){try{v.getMedia().getDisplayElement().webkitEnterFullscreen()}catch(D){}}else{try{v.getMedia().getDisplayElement().webkitExitFullscreen()}catch(D){}}}}else{if(E){document.onkeydown=g;clearInterval(n);var C=document.body.getBoundingClientRect();v.width=Math.abs(C.left)+Math.abs(C.right);v.height=window.innerHeight;var B={position:"fixed",width:"100%",height:"100%",top:0,left:0,zIndex:2147483000};c(u,B);B.zIndex=1;c(v.getMedia().getDisplayElement(),B);B.zIndex=2;c(q,B)}else{document.onkeydown="";v.width=f;v.height=z;c(u,{position:"relative",height:v.height,width:v.width,zIndex:0})}i(v.width,v.height)}}};function a(d){return([b.html5.view.positions.TOP,b.html5.view.positions.RIGHT,b.html5.view.positions.BOTTOM,b.html5.view.positions.LEFT].toString().indexOf(d.toUpperCase())>-1)}b.html5.view.positions={TOP:"TOP",RIGHT:"RIGHT",BOTTOM:"BOTTOM",LEFT:"LEFT",OVER:"OVER",NONE:"NONE"}})(jwplayer);(function(a){var b={backgroundcolor:"",margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",buttoncolor:parseInt("ffffff",16),position:a.html5.view.positions.BOTTOM,idlehide:false,layout:{left:{position:"left",elements:[{name:"play",type:"button"},{name:"divider",type:"divider"},{name:"prev",type:"button"},{name:"divider",type:"divider"},{name:"next",type:"button"},{name:"divider",type:"divider"},{name:"elapsed",type:"text"}]},center:{position:"center",elements:[{name:"time",type:"slider"}]},right:{position:"right",elements:[{name:"duration",type:"text"},{name:"blank",type:"button"},{name:"divider",type:"divider"},{name:"mute",type:"button"},{name:"volume",type:"slider"},{name:"divider",type:"divider"},{name:"fullscreen",type:"button"}]}}};_css=a.utils.css;_hide=function(c){_css(c,{display:"none"})};_show=function(c){_css(c,{display:"block"})};a.html5.controlbar=function(j,L){var i=j;var A=a.utils.extend({},b,i.skin.getComponentSettings("controlbar"),L);if(A.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[A.position]=="undefined"){return}if(a.utils.mapLength(i.skin.getComponentLayout("controlbar"))>0){A.layout=i.skin.getComponentLayout("controlbar")}var P;var I;var O;var B;var t="none";var f;var h;var Q;var e;var d;var w;var s;var J={};var n=false;var c={};function H(){O=0;B=0;I=0;if(!n){var V={height:i.skin.getSkinElement("controlbar","background").height,backgroundColor:A.backgroundcolor};P=document.createElement("div");P.id=i.id+"_jwplayer_controlbar";_css(P,V)}v("capLeft","left",false,P);var W={position:"absolute",height:i.skin.getSkinElement("controlbar","background").height,left:i.skin.getSkinElement("controlbar","capLeft").width,zIndex:0};N("background",P,W,"img");if(i.skin.getSkinElement("controlbar","background")){J.background.src=i.skin.getSkinElement("controlbar","background").src}W.zIndex=1;N("elements",P,W);v("capRight","right",false,P)}this.getDisplayElement=function(){return P};this.resize=function(X,V){a.utils.cancelAnimation(P);document.getElementById(i.id).onmousemove=x;d=X;w=V;x();var W=u();D({id:i.id,duration:Q,position:h});r({id:i.id,bufferPercent:e});return W};function o(){var W=["timeSlider","volumeSlider","timeSliderRail","volumeSliderRail"];for(var X in W){var V=W[X];if(typeof J[V]!="undefined"){c[V]=J[V].getBoundingClientRect()}}}function x(){a.utils.cancelAnimation(P);if(g()){a.utils.fadeTo(P,1,0,1,0)}else{a.utils.fadeTo(P,0,0.1,1,2)}}function g(){if(i.jwGetState()==a.api.events.state.IDLE||i.jwGetState()==a.api.events.state.PAUSED){if(A.idlehide){return false}return true}if(i.jwGetFullscreen()){return false}if(A.position==a.html5.view.positions.OVER){return false}return true}function N(Z,Y,X,V){var W;if(!n){if(!V){V="div"}W=document.createElement(V);J[Z]=W;W.id=P.id+"_"+Z;Y.appendChild(W)}else{W=document.getElementById(P.id+"_"+Z)}if(X!==undefined){_css(W,X)}return W}function G(){U(A.layout.left);U(A.layout.right,-1);U(A.layout.center)}function U(Y,V){var Z=Y.position=="right"?"right":"left";var X=a.utils.extend([],Y.elements);if(V!==undefined){X.reverse()}for(var W=0;W<X.length;W++){z(X[W],Z)}}function E(){return I++}function z(Z,ab){var Y,W,X,V,ad;switch(Z.name){case"play":v("playButton",ab,false);v("pauseButton",ab,true);K("playButton","jwPlay");K("pauseButton","jwPause");break;case"divider":v("divider"+E(),ab,true,undefined,undefined,Z.width);break;case"prev":v("prevButton",ab,true);K("prevButton","jwPlaylistPrev");break;case"next":v("nextButton",ab,true);K("nextButton","jwPlaylistNext");break;case"elapsed":v("elapsedText",ab,true);break;case"time":W=i.skin.getSkinElement("controlbar","timeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapLeft").width;X=i.skin.getSkinElement("controlbar","timeSliderCapRight")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapRight").width;Y=ab=="left"?W:X;V=i.skin.getSkinElement("controlbar","timeSliderRail").width+W+X;ad={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",top:0,width:V};ad[ab]=ab=="left"?O:B;var aa=N("timeSlider",J.elements,ad);v("timeSliderCapLeft",ab,true,aa,ab=="left"?0:Y);v("timeSliderRail",ab,false,aa,Y);v("timeSliderBuffer",ab,false,aa,Y);v("timeSliderProgress",ab,false,aa,Y);v("timeSliderThumb",ab,false,aa,Y);v("timeSliderCapRight",ab,true,aa,ab=="right"?0:Y);M("time");break;case"fullscreen":v("fullscreenButton",ab,false);v("normalscreenButton",ab,true);K("fullscreenButton","jwSetFullscreen",true);K("normalscreenButton","jwSetFullscreen",false);break;case"volume":W=i.skin.getSkinElement("controlbar","volumeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;X=i.skin.getSkinElement("controlbar","volumeSliderCapRight")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapRight").width;Y=ab=="left"?W:X;V=i.skin.getSkinElement("controlbar","volumeSliderRail").width+W+X;ad={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",top:0,width:V};ad[ab]=ab=="left"?O:B;var ac=N("volumeSlider",J.elements,ad);v("volumeSliderCapLeft",ab,true,ac,ab=="left"?0:Y);v("volumeSliderRail",ab,true,ac,Y);v("volumeSliderProgress",ab,false,ac,Y);v("volumeSliderCapRight",ab,true,ac,ab=="right"?0:Y);M("volume");break;case"mute":v("muteButton",ab,false);v("unmuteButton",ab,true);K("muteButton","jwSetMute",true);K("unmuteButton","jwSetMute",false);break;case"duration":v("durationText",ab,true);break}}function v(X,aa,W,ac,Y,V){if((i.skin.getSkinElement("controlbar",X)!==undefined||X.indexOf("Text")>0||X.indexOf("divider")===0)&&!(X.indexOf("divider")===0&&s.indexOf("divider")===0)){s=X;var Z={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",display:"block",top:0};if((X.indexOf("next")===0||X.indexOf("prev")===0)&&i.jwGetPlaylist().length<2){W=false;Z.display="none"}var ad;if(X.indexOf("Text")>0){X.innerhtml="00:00";Z.font=A.fontsize+"px/"+(i.skin.getSkinElement("controlbar","background").height+1)+"px "+A.font;Z.color=A.fontcolor;Z.textAlign="center";Z.fontWeight=A.fontweight;Z.fontStyle=A.fontstyle;Z.cursor="default";ad=14+3*A.fontsize}else{if(X.indexOf("divider")===0){if(V){if(!isNaN(parseInt(V))){ad=parseInt(V)}}else{Z.background="url("+i.skin.getSkinElement("controlbar","divider").src+") repeat-x center left";ad=i.skin.getSkinElement("controlbar","divider").width}}else{Z.background="url("+i.skin.getSkinElement("controlbar",X).src+") repeat-x center left";ad=i.skin.getSkinElement("controlbar",X).width}}if(aa=="left"){Z.left=isNaN(Y)?O:Y;if(W){O+=ad}}else{if(aa=="right"){Z.right=isNaN(Y)?B:Y;if(W){B+=ad}}}if(a.utils.typeOf(ac)=="undefined"){ac=J.elements}Z.width=ad;if(n){_css(J[X],Z)}else{var ab=N(X,ac,Z);if(i.skin.getSkinElement("controlbar",X+"Over")!==undefined){ab.onmouseover=function(ae){ab.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",X+"Over").src,")"].join("")};ab.onmouseout=function(ae){ab.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",X).src,")"].join("")}}}}}function C(){i.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,y);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER,r);i.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,p);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME,D);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,T);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME,k);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE,F)}function y(){H();G();u();R()}function R(){D({id:i.id,duration:i.jwGetDuration(),position:0});r({id:i.id,bufferProgress:0});T({id:i.id,mute:i.jwGetMute()});p({id:i.id,newstate:a.api.events.state.IDLE});k({id:i.id,volume:i.jwGetVolume()})}function K(X,Y,W){if(n){return}if(i.skin.getSkinElement("controlbar",X)!==undefined){var V=J[X];if(V!==null){_css(V,{cursor:"pointer"});if(Y=="fullscreen"){V.onmouseup=function(Z){Z.stopPropagation();i.jwSetFullscreen(!i.jwGetFullscreen())}}else{V.onmouseup=function(Z){Z.stopPropagation();if(W!==null){i[Y](W)}else{i[Y]()}}}}}}function M(V){if(n){return}var W=J[V+"Slider"];_css(J.elements,{cursor:"pointer"});_css(W,{cursor:"pointer"});W.onmousedown=function(X){t=V};W.onmouseup=function(X){X.stopPropagation();S(X.pageX)};W.onmousemove=function(X){if(t=="time"){f=true;var Y=X.pageX-c[V+"Slider"].left-window.pageXOffset;_css(J.timeSliderThumb,{left:Y})}}}function S(W){f=false;var V;if(t=="time"){V=W-c.timeSliderRail.left+window.pageXOffset;var Y=V/c.timeSliderRail.width*Q;if(Y<0){Y=0}else{if(Y>Q){Y=Q-3}}i.jwSeek(Y);if(i.jwGetState()!=a.api.events.state.PLAYING){i.jwPlay()}}else{if(t=="volume"){V=W-c.volumeSliderRail.left-window.pageXOffset;var X=Math.round(V/c.volumeSliderRail.width*100);if(X<0){X=0}else{if(X>100){X=100}}if(i.jwGetMute()){i.jwSetMute(false)}i.jwSetVolume(X)}}t="none"}function r(W){if(W.bufferPercent!==null){e=W.bufferPercent}var X=c.timeSliderRail.width;var V=isNaN(Math.round(X*e/100))?0:Math.round(X*e/100);_css(J.timeSliderBuffer,{width:V})}function T(V){if(V.mute){_hide(J.muteButton);_show(J.unmuteButton);_hide(J.volumeSliderProgress)}else{_show(J.muteButton);_hide(J.unmuteButton);_show(J.volumeSliderProgress)}}function p(V){if(V.newstate==a.api.events.state.BUFFERING||V.newstate==a.api.events.state.PLAYING){_show(J.pauseButton);_hide(J.playButton)}else{_hide(J.pauseButton);_show(J.playButton)}x();if(V.newstate==a.api.events.state.IDLE){_hide(J.timeSliderBuffer);_hide(J.timeSliderProgress);_hide(J.timeSliderThumb);D({id:i.id,duration:i.jwGetDuration(),position:0})}else{_show(J.timeSliderBuffer);if(V.newstate!=a.api.events.state.BUFFERING){_show(J.timeSliderProgress);_show(J.timeSliderThumb)}}}function F(V){r({bufferPercent:0});D(a.utils.extend(V,{position:0,duration:Q}))}function D(Y){if(Y.position!==null){h=Y.position}if(Y.duration!==null){Q=Y.duration}var W=(h===Q===0)?0:h/Q;var V=isNaN(Math.round(c.timeSliderRail.width*W))?0:Math.round(c.timeSliderRail.width*W);var X=V;J.timeSliderProgress.style.width=V+"px";if(!f){if(J.timeSliderThumb){J.timeSliderThumb.style.left=X+"px"}}if(J.durationText){J.durationText.innerHTML=m(Q)}if(J.elapsedText){J.elapsedText.innerHTML=m(h)}}function m(V){str="00:00";if(V>0){str=Math.floor(V/60)<10?"0"+Math.floor(V/60)+":":Math.floor(V/60)+":";str+=Math.floor(V%60)<10?"0"+Math.floor(V%60):Math.floor(V%60)}return str}function l(){var Y,W;var X=document.getElementById(P.id+"_elements").childNodes;for(var V in document.getElementById(P.id+"_elements").childNodes){if(isNaN(parseInt(V,10))){continue}if(X[V].id.indexOf(P.id+"_divider")===0&&W.id.indexOf(P.id+"_divider")===0){X[V].style.display="none"}else{if(X[V].id.indexOf(P.id+"_divider")===0&&Y.style.display!="none"){X[V].style.display="block"}}if(X[V].style.display!="none"){W=X[V]}Y=X[V]}}function u(){l();if(i.jwGetFullscreen()){_show(J.normalscreenButton);_hide(J.fullscreenButton)}else{_hide(J.normalscreenButton);_show(J.fullscreenButton)}var W={width:d};var V={};if(A.position==a.html5.view.positions.OVER||i.jwGetFullscreen()){W.left=A.margin;W.width-=2*A.margin;W.top=w-i.skin.getSkinElement("controlbar","background").height-A.margin;W.height=i.skin.getSkinElement("controlbar","background").height}else{W.left=0}V.left=i.skin.getSkinElement("controlbar","capLeft").width;V.width=W.width-i.skin.getSkinElement("controlbar","capLeft").width-i.skin.getSkinElement("controlbar","capRight").width;var X=i.skin.getSkinElement("controlbar","timeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapLeft").width;_css(J.timeSliderRail,{width:(V.width-O-B),left:X});if(J.timeSliderCapRight!==undefined){_css(J.timeSliderCapRight,{left:X+(V.width-O-B)})}_css(P,W);_css(J.elements,V);_css(J.background,V);o();return W}function k(Z){if(J.volumeSliderRail!==undefined){var X=isNaN(Z.volume/100)?1:Z.volume/100;var Y=parseInt(J.volumeSliderRail.style.width.replace("px",""),10);var V=isNaN(Math.round(Y*X))?0:Math.round(Y*X);var aa=parseInt(J.volumeSliderRail.style.right.replace("px",""),10);var W=i.skin.getSkinElement("controlbar","volumeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;_css(J.volumeSliderProgress,{width:V,left:W});if(J.volumeSliderCapLeft!==undefined){_css(J.volumeSliderCapLeft,{left:0})}}}function q(){H();G();o();n=true;C();R();P.style.opacity=A.idlehide?0:1}q();return this}})(jwplayer);(function(b){var a=["width","height","state","playlist","item","position","buffer","duration","volume","mute","fullscreen"];b.html5.controller=function(t,r,e,q){var w=t;var y=e;var d=q;var k=r;var A=true;var c=-1;var u=(y.config.debug!==undefined)&&(y.config.debug.toString().toLowerCase()=="console");var i=new b.html5.eventdispatcher(k.id,u);b.utils.extend(this,i);function m(D){i.sendEvent(D.type,D)}y.addGlobalListener(m);function p(){try{if(y.playlist[y.item].levels[0].file.length>0){if(A||y.state==b.api.events.state.IDLE){y.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,function(){y.getMedia().play()});y.addEventListener(b.api.events.JWPLAYER_MEDIA_TIME,function(E){if(E.position>=y.playlist[y.item].start&&c>=0){y.playlist[y.item].start=c;c=-1}});if(y.config.repeat){y.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,function(E){setTimeout(n,25)})}y.getMedia().load(y.playlist[y.item]);A=false}else{if(y.state==b.api.events.state.PAUSED){y.getMedia().play()}}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function B(){try{if(y.playlist[y.item].levels[0].file.length>0){switch(y.state){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:y.getMedia().pause();break}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function x(D){try{if(y.playlist[y.item].levels[0].file.length>0){if(typeof D!="number"){D=parseFloat(D)}switch(y.state){case b.api.events.state.IDLE:if(c<0){c=y.playlist[y.item].start;y.playlist[y.item].start=D}p();break;case b.api.events.state.PLAYING:case b.api.events.state.PAUSED:case b.api.events.state.BUFFERING:y.getMedia().seek(D);break}}return true}catch(E){i.sendEvent(b.api.events.JWPLAYER_ERROR,E)}return false}function j(){try{if(y.playlist[y.item].levels[0].file.length>0&&y.state!=b.api.events.state.IDLE){y.getMedia().stop()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function g(){try{if(y.playlist[y.item].levels[0].file.length>0){if(y.config.shuffle){o(s())}else{if(y.item+1==y.playlist.length){o(0)}else{o(y.item+1)}}}if(y.state!=b.api.events.state.PLAYING&&y.state!=b.api.events.state.BUFFERING){p()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function f(){try{if(y.playlist[y.item].levels[0].file.length>0){if(y.config.shuffle){o(s())}else{if(y.item===0){o(y.playlist.length-1)}else{o(y.item-1)}}}if(y.state!=b.api.events.state.PLAYING&&y.state!=b.api.events.state.BUFFERING){p()}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function s(){var D=null;if(y.playlist.length>1){while(D===null){D=Math.floor(Math.random()*y.playlist.length);if(D==y.item){D=null}}}else{D=0}return D}function o(E){y.resetEventListeners();y.addGlobalListener(m);try{if(y.playlist[E].levels[0].file.length>0){var F=y.state;if(F!==b.api.events.state.IDLE){j()}y.item=E;A=true;y.setActiveMediaProvider(y.playlist[y.item]);i.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM,{index:E});if(F==b.api.events.state.PLAYING||F==b.api.events.state.BUFFERING||y.config.chromeless||e.config.autostart===true){p()}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function z(E){try{switch(typeof(E)){case"number":y.getMedia().volume(E);break;case"string":y.getMedia().volume(parseInt(E,10));break}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function l(E){try{if(typeof E=="undefined"){y.getMedia().mute(!y.mute)}else{if(E.toString().toLowerCase()=="true"){y.getMedia().mute(true)}else{y.getMedia().mute(false)}}return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function h(E,D){try{y.width=E;y.height=D;d.resize(E,D);i.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:y.width,height:y.height});return true}catch(F){i.sendEvent(b.api.events.JWPLAYER_ERROR,F)}return false}function v(E){try{if(typeof E=="undefined"){y.fullscreen=!y.fullscreen;d.fullscreen(!y.fullscreen)}else{if(E.toString().toLowerCase()=="true"){y.fullscreen=true;d.fullscreen(true)}else{y.fullscreen=false;d.fullscreen(false)}}i.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:y.width,height:y.height});i.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:E});return true}catch(D){i.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function C(D){try{j();y.loadPlaylist(D);o(y.item);return true}catch(E){i.sendEvent(b.api.events.JWPLAYER_ERROR,E)}return false}b.html5.controller.repeatoptions={LIST:"LIST",ALWAYS:"ALWAYS",SINGLE:"SINGLE",NONE:"NONE"};function n(){y.resetEventListeners();y.addGlobalListener(m);switch(y.config.repeat.toUpperCase()){case b.html5.controller.repeatoptions.SINGLE:p();break;case b.html5.controller.repeatoptions.ALWAYS:if(y.item==y.playlist.length-1&&!y.config.shuffle){o(0);p()}else{g()}break;case b.html5.controller.repeatoptions.LIST:if(y.item==y.playlist.length-1&&!y.config.shuffle){o(0)}else{g()}break}}this.play=p;this.pause=B;this.seek=x;this.stop=j;this.next=g;this.prev=f;this.item=o;this.setVolume=z;this.setMute=l;this.resize=h;this.setFullscreen=v;this.load=C}})(jwplayer);(function(a){a.html5.defaultSkin=function(){this.text='<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.0"><settings><setting name="backcolor" value="0xFFFFFF"/><setting name="frontcolor" value="0x000000"/><setting name="lightcolor" value="0x000000"/><setting name="screencolor" value="0x000000"/></settings><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/></settings><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNrslLENwAAIwxLU/09j5AiOgD5hVQzNAVY8JK4qEfHMIKBnd2+BQlBINaiRtL/aV2rdzYBsM6CIONbI1NZENTr3RwdB2PlnJgJ6BRgA4hwu5Qg5iswAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhJREFUeNpiYqABYBo1dNRQ+hr6H4jvA3E8NS39j4SpZvh/LJig4YxEGEqy3kET+w+AOGFQRhTJhrEQkGcczfujhg4CQwECDADpTRWU/B3wHQAAAABJRU5ErkJggg=="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiYBgFo2DwA0YC8v/R1P4nRu+ooaOGUtnQUTAKhgIACDAAFCwQCfAJ4gwAAAAASUVORK5CYII="/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNpiYBgFo2Dog/9QDAPyQHweTYwiQ/2B+D0Wi8g2tB+JTdBQRiIMJVkvEy0iglhDF9Aq9uOpHVEwoE+NJDUKRsFgAAABBgDe2hqZcNNL0AAAAABJRU5ErkJggg=="/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUeNpiYBgFo2Dog/9AfB6I5dHE/lNqKAi/B2J/ahsKw/3EGMpIhKEk66WJoaR6fz61IyqemhEFSlL61ExSo2AUDAYAEGAAiG4hj+5t7M8AAAAASUVORK5CYII="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpiYBgFo2AU0Bwwzluw+D8tLWARFhKiqQ9YuLg4aWsBGxs7bS1gZ6e5BWyjSX0UjIKhDgACDABlYQOGh5pYywAAAABJRU5ErkJggg=="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFo2AU0Bww1jc0/aelBSz8/Pw09QELOzs7bS1gY2OjrQWsrKy09gHraFIfBaNgqAOAAAMAvy0DChXHsZMAAAAASUVORK5CYII="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiYBgFo2AU0BwwAvF/WlrARGsfjFow8BaMglEwCugAAAIMAOHfAQunR+XzAAAAAElFTkSuQmCC"/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAYAAAA870V8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiZICA/yCCiQEJUJcDEGAAY0gBD1/m7Q0AAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiYBgFIw3MB+L/5Gj8j6yRiRTFyICJXHfTXyMLAXlGati4YDRFDj8AEGAABk8GSqqS4CoAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFgxz8p7bm+cQa+h8LHy7GhEcjIz4bmAjYykiun/8j0fakGPIfTfPgiSr6aB4FVAcAAQYAWdwR1G1Wd2gAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGpJREFUeNpi/P//PwM9ABMDncCoRYPfIqqDZcuW1UPp/6AUDcNM1DQYKtRAlaAj1mCSLSLXYIIWUctgDItoZfDA5aOoqKhGEANIM9LVR7SymGDQUctikuOIXkFNdhHEOFrDjlpEd4sAAgwAriRMub95fu8AAAAASUVORK5CYII="/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi/P//PwM9ABMDncCoRYPfIlqAeij9H5SiYZiqBqPTlFqE02BKLSLaYFItIttgQhZRzWB8FjENiuRJ7aAbsMQwYMl7wDIsWUUQ42gNO2oR3S0CCDAAKhKq6MLLn8oAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE5JREFUeNpiYBgFo2DQA0YC8v/xqP1PjDlMRDrEgUgxkgHIlfZoriVGjmzLsLFHAW2D6D8eA/9Tw7L/BAwgJE90PvhPpNgoGAVDEQAEGAAMdhTyXcPKcAAAAABJRU5ErkJggg=="/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYBgFo2DIg/9UUkOUAf8JiFFsyX88fJyAkcQgYMQjNkzBoAgiezyRbE+tFGSPxQJ7auYBmma0UTAKBhgABBgAJAEY6zON61sAAAAASUVORK5CYII="/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC"/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg=="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNrs1jEOgCAMBVAg7t5/8qaoIy4uoobyXsLCxA+0NCUAAADGUWvdQoQ41x4ixNBB2hBvBskdD3w5ZCkl3+33VqI0kjBBlh9rp+uTcyOP33TnolfsU85XX3yIRpQph8ZQY3wTZtU5AACASA4BBgDHoVuY1/fvOQAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrsl+1twjAQhsHq/7BBYQLYIBmBDcoGMAIjtBPQTcII2SDtBDBBwrU6pGsUO7YbO470PtKJkz9iH++d4ywWAAAAAABgljRNsyWr2bZzDuJG1rLdZhcMbTjrBCGDyUKsqQLFciJb9bSvuG/WagRVRUVUI6gqy5HVeKWfSgRyJruKIU//TrZTSn2nmlaXThrloi/v9F2STC1W4+Aw5cBzkquRc09bofFNc6YLxEON0VUZS5FPTftO49vMjRsIF3RhOGr7/D/pJw+FKU+q0vDyq8W42jCunDqI3LC5XxNj2wHLU1XjaRnb0Lhykhqhhd8MtSF5J9tbjCv4mXGvKJz/65FF/qJryyaaIvzP2QRxZTX2nTuXjvV/VPFSwyLnW7mpH99yTh1FEVro6JBSd40/pMrRdV8vPtcKl28T2pT8TnFZ4yNosct3Q0io6JfBiz1FlGdqVQH3VHnepAEAAAAAADDzEGAAcTwB10jWgxcAAAAASUVORK5CYII="/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuhJREFUeNrsWr9rU1EUznuNGqvFQh1ULOhiBx0KDtIuioO4pJuik3FxFfUPaAV1FTdx0Q5d2g4FFxehTnEpZHFoBy20tCIWtGq0TZP4HfkeHB5N8m6Sl/sa74XDybvv3vvOd8/Pe4lXrVZT3dD8VJc0B8QBcUAcEAfESktHGeR5XtMfqFQq/f92zPe/NbtGlKTdCY30kuxrpMGO94BlQCXs+rbh3ONgA6BlzP1p20d80gEI5hmA2A92Qua1Q2PtAFISM+bvjMG8U+Q7oA3rQGASwrYCU6WpNdLGYbA+Pq5jjXIiwi8EEa2UDbQSaKOIuV+SlkcCrfjY8XTI9EpKGwP0C2kru2hLtHqa4zoXtZRWyvi4CLwv9Opr6Hkn6A9HKgEANsQ1iqC3Ub/vRUk2JgmRkatK36kVrnt0qObunwUdUUMXMWYpakJsO5Am8tAw2GBIgwWA+G2S2dMpiw0gDioQRQJoKhRb1QiDwlHZUABYbaXWsm5ae6loTE4ZDxN4CZar8foVzOJ2iyZ2kWF3t7YIevffaMT5yJ70kQb2fQ1sE5SHr2wazs2wgMxgbsEKEAgxAvZUJbQLBGTSBMgNrncJbA6AljtS/eKDJ0Ez+DmrQEzXS2h1Ck25kAg0IZcUOaydCy4sYnN2fOA+2AP16gNoHALlQ+fwH7XO4CxLenUpgj4xr6ugY2roPMbMx+Xs18m/E8CVEIhxsNeg83XWOAN6grG3lGbk8uE5fr4B/WH3cJw+co/l9nTYsSGYCJ/lY5/qv0thn6nrIWmjeJcPSnWOeY++AkF8tpJHIMAUs/MaBBpj3znZfQo5psY+ZrG4gv5HickjEOymKjEeRpgyST6IuZcTcWbnjcgdPi5ghxciRKsl1lDSsgwA1i8fssonJgzmTSqfGUkCENndNdAL7PS6QQ7ZYISTo+1qq0LEWjTWcvY4isa4z+yfQB+7ooyHVg5RI7/i1Ijn/vnggDggDogD4oC00P4KMACd/juEHOrS4AAAAABJRU5ErkJggg=="/></elements></component><component name="dock"><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUeNrs0cEJACAQA8Eofu0fu/W6EM5ZSAFDRpKTBs00CQQEBAQEBAQEBAQEBAQEBATkK8iqbY+AgICAgICAgICAgICAgICAgIC86QowAG5PAQzEJ0lKAAAAAElFTkSuQmCC"/></elements></component><component name="playlist"><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNrs2NEJwCAMBcBYuv/CFuIE9VN47WWCR7iocXR3pdWdGPqqwIoMjYfQeAiNh9B4JHc6MHQVHnjggQceeOCBBx77TifyeOY0iHi8DqIdEY8dD5cL094eePzINB5CO/LwcOTptNB4CP25L4TIbZzpU7UEGAA5wz1uF5rF9AAAAABJRU5ErkJggg=="/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNrsy6ENACAMAMHClp2wYxZLAg5Fcu9e3OjuOKqqfTMzbs14CIZhGIZhGIZhGP4VLwEGAK/BBnVFpB0oAAAAAElFTkSuQmCC"/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNrsy7ENACAMBLE8++8caFFKKiRffU53112SGs3ttOohGIZhGIZhGIZh+Fe8BRgAiaUGde6NOSEAAAAASUVORK5CYII="/></elements></component></components></skin>';this.xml=null;if(window.DOMParser){parser=new DOMParser();this.xml=parser.parseFromString(this.text,"text/xml")}else{this.xml=new ActiveXObject("Microsoft.XMLDOM");this.xml.async="false";this.xml.loadXML(this.text)}return this}})(jwplayer);(function(a){_css=a.utils.css;_hide=function(b){_css(b,{display:"none"})};_show=function(b){_css(b,{display:"block"})};a.html5.display=function(o,z){var r={icons:true};var j=a.utils.extend({},r,z);var w=o;var d={};var f;var A;var k;var x;var y;var p;var i;var n=w.skin.getComponentSettings("display").bufferrotation===undefined?15:parseInt(w.skin.getComponentSettings("display").bufferrotation,10);var e=w.skin.getComponentSettings("display").bufferinterval===undefined?100:parseInt(w.skin.getComponentSettings("display").bufferinterval,10);var c={display:{style:{cursor:"pointer",top:0,left:0,overflow:"hidden"},click:u},display_icon:{style:{cursor:"pointer",position:"absolute",top:((w.skin.getSkinElement("display","background").height-w.skin.getSkinElement("display","playIcon").height)/2),left:((w.skin.getSkinElement("display","background").width-w.skin.getSkinElement("display","playIcon").width)/2),border:0,margin:0,padding:0,zIndex:3}},display_iconBackground:{style:{cursor:"pointer",position:"absolute",top:((A-w.skin.getSkinElement("display","background").height)/2),left:((f-w.skin.getSkinElement("display","background").width)/2),border:0,backgroundImage:(["url(",w.skin.getSkinElement("display","background").src,")"]).join(""),width:w.skin.getSkinElement("display","background").width,height:w.skin.getSkinElement("display","background").height,margin:0,padding:0,zIndex:2}},display_image:{style:{display:"none",width:f,height:A,position:"absolute",cursor:"pointer",left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1}},display_text:{style:{zIndex:4,position:"relative",opacity:0.8,backgroundColor:parseInt("000000",16),color:parseInt("ffffff",16),textAlign:"center",fontFamily:"Arial,sans-serif",padding:"0 5px",fontSize:14}}};w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,l);w.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,l);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,l);w.jwAddEventListener(a.api.events.JWPLAYER_ERROR,t);B();function B(){d.display=s("div","display");d.display_text=s("div","display_text");d.display.appendChild(d.display_text);d.display_image=s("img","display_image");d.display_image.onerror=function(C){_hide(d.display_image)};d.display_image.onload=m;d.display_icon=s("div","display_icon");d.display_iconBackground=s("div","display_iconBackground");d.display.appendChild(d.display_image);d.display_iconBackground.appendChild(d.display_icon);d.display.appendChild(d.display_iconBackground);b()}this.getDisplayElement=function(){return d.display};this.resize=function(D,C){f=D;A=C;_css(d.display,{width:D,height:C});_css(d.display_text,{width:(D-10),top:((A-d.display_text.getBoundingClientRect().height)/2)});_css(d.display_iconBackground,{top:((A-w.skin.getSkinElement("display","background").height)/2),left:((f-w.skin.getSkinElement("display","background").width)/2)});h();l({})};function m(C){k=d.display_image.naturalWidth;x=d.display_image.naturalHeight;h()}function h(){a.utils.stretch(w.jwGetStretching(),d.display_image,f,A,k,x)}function s(C,E){var D=document.createElement(C);D.id=w.id+"_jwplayer_"+E;_css(D,c[E].style);return D}function b(){for(var C in d){if(c[C].click!==undefined){d[C].onclick=c[C].click}}}function u(C){if(typeof C.preventDefault!="undefined"){C.preventDefault()}else{C.returnValue=false}if(w.jwGetState()!=a.api.events.state.PLAYING){w.jwPlay()}else{w.jwPause()}}function g(C){if(i||!j.icons){q();return}_show(d.display_iconBackground);d.display_icon.style.backgroundImage=(["url(",w.skin.getSkinElement("display",C).src,")"]).join("");_css(d.display_icon,{display:"block",width:w.skin.getSkinElement("display",C).width,height:w.skin.getSkinElement("display",C).height,top:(w.skin.getSkinElement("display","background").height-w.skin.getSkinElement("display",C).height)/2,left:(w.skin.getSkinElement("display","background").width-w.skin.getSkinElement("display",C).width)/2});if(w.skin.getSkinElement("display",C+"Over")!==undefined){d.display_icon.onmouseover=function(D){d.display_icon.style.backgroundImage=["url(",w.skin.getSkinElement("display",C+"Over").src,")"].join("")};d.display_icon.onmouseout=function(D){d.display_icon.style.backgroundImage=["url(",w.skin.getSkinElement("display",C).src,")"].join("")}}else{d.display_icon.onmouseover=null;d.display_icon.onmouseout=null}}function q(){_hide(d.display_icon);_hide(d.display_iconBackground)}function t(C){i=true;q();d.display_text.innerHTML=C.error;_show(d.display_text);d.display_text.style.top=((A-d.display_text.getBoundingClientRect().height)/2)+"px"}function v(){var C=d.display_image;d.display_image=s("img","display_image");d.display_image.onerror=function(D){_hide(d.display_image)};d.display_image.onload=m;d.display.replaceChild(d.display_image,C)}function l(C){if((C.type==a.api.events.JWPLAYER_PLAYER_STATE||C.type==a.api.events.JWPLAYER_PLAYLIST_ITEM)&&i){i=false;_hide(d.display_text)}if(p!==undefined){clearInterval(p);p=null;a.utils.animations.rotate(d.display_icon,0)}switch(w.jwGetState()){case a.api.events.state.BUFFERING:g("bufferIcon");y=0;p=setInterval(function(){y+=n;a.utils.animations.rotate(d.display_icon,y%360)},e);g("bufferIcon");break;case a.api.events.state.PAUSED:_css(d.display_image,{background:"transparent no-repeat center center"});g("playIcon");break;case a.api.events.state.IDLE:if(w.jwGetPlaylist()[w.jwGetItem()].image){_css(d.display_image,{display:"block"});d.display_image.src=a.utils.getAbsolutePath(w.jwGetPlaylist()[w.jwGetItem()].image)}else{v()}g("playIcon");break;default:if(w.jwGetMute()){v();g("muteIcon")}else{v();_hide(d.display_iconBackground);_hide(d.display_icon)}break}}return this}})(jwplayer);(function(a){a.html5.dock=function(g,c){function f(){return{align:a.html5.view.positions.RIGHT}}var k=a.utils.extend({},f(),c);if(k.align=="FALSE"){return}var h={};var b=[];var d;var e;var j=document.createElement("div");j.id=g.id+"_jwplayer_dock";this.getDisplayElement=function(){return j};this.setButton=function(o,l,m,n){if(!l&&h[o]){a.utils.arrays.remove(b,o);j.removeChild(h[o].div);delete h[o]}else{if(l){if(!h[o]){h[o]={}}h[o].handler=l;h[o].outGraphic=m;h[o].overGraphic=n;if(!h[o].div){b.push(o);h[o].div=document.createElement("div");h[o].div.style.position="relative";j.appendChild(h[o].div);h[o].div.appendChild(document.createElement("img"));h[o].div.childNodes[0].style.position="absolute";h[o].div.childNodes[0].style.left=0;h[o].div.childNodes[0].style.top=0;h[o].div.childNodes[0].style.zIndex=10;h[o].div.childNodes[0].style.cursor="pointer";h[o].div.appendChild(document.createElement("img"));h[o].div.childNodes[1].style.position="absolute";h[o].div.childNodes[1].style.left=0;h[o].div.childNodes[1].style.top=0;if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}h[o].div.childNodes[1].style.zIndex=9;h[o].div.childNodes[1].style.cursor="pointer";h[o].div.onmouseover=function(){if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(g.skin.getSkinElement("dock","buttonOver")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","buttonOver").src}};h[o].div.onmouseout=function(){if(h[o].outGraphic){h[o].div.childNodes[0].src=h[o].outGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}};if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(h[o].outGraphic){h[o].div.childNodes[0].src=h[o].outGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}}if(l){h[o].div.onclick=function(p){p.preventDefault();a(g.id).callback(o);if(h[o].overGraphic){h[o].div.childNodes[0].src=h[o].overGraphic}if(g.skin.getSkinElement("dock","button")){h[o].div.childNodes[1].src=g.skin.getSkinElement("dock","button").src}}}}}i(d,e)};function i(n,l){d=n;e=l;if(b.length>0){var p=10;var r=n-g.skin.getSkinElement("dock","button").width-p;var o=p;var q=-1;if(k.align==a.html5.view.positions.LEFT){q=1;r=p}for(var m=0;m<b.length;m++){var s=Math.floor(o/l);if((o+g.skin.getSkinElement("dock","button").height+p)>((s+1)*l)){o=((s+1)*l)+p;s=Math.floor(o/l)}h[b[m]].div.style.top=(o%l)+"px";h[b[m]].div.style.left=(r+(g.skin.getSkinElement("dock","button").width+p)*s*q)+"px";o+=g.skin.getSkinElement("dock","button").height+p}}}this.resize=i;return this}})(jwplayer);(function(a){a.html5.eventdispatcher=function(d,b){var c=new a.events.eventdispatcher(b);a.utils.extend(this,c);this.sendEvent=function(e,f){if(f===undefined){f={}}a.utils.extend(f,{id:d,version:a.version,type:e});c.sendEvent(e,f)}}})(jwplayer);(function(a){var b={prefix:"http://l.longtailvideo.com/html5/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:3,hide:true,position:"bottom-left"};_css=a.utils.css;a.html5.logo=function(l,m){var r=l;var n;var i;var c;j();function j(){p();d();f()}function p(){if(b.prefix){var t=l.version.split(/\W/).splice(0,2).join("/");if(b.prefix.indexOf(t)<0){b.prefix+=t+"/"}}if(m.position==a.html5.view.positions.OVER){m.position=b.position}i=a.utils.extend({},b)}function d(){c=document.createElement("img");c.id=r.id+"_jwplayer_logo";c.style.display="none";c.onload=function(t){_css(c,q());r.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,s);e()};if(!i.file){return}if(i.file.indexOf("http://")===0){c.src=i.file}else{c.src=i.prefix+i.file}}if(!i.file){return}this.resize=function(u,t){};this.getDisplayElement=function(){return c};function f(){if(i.link){c.onmouseover=h;c.onmouseout=e;c.onclick=o}else{this.mouseEnabled=false}}function o(t){if(typeof t!="undefined"){t.stopPropagation()}r.jwPause();r.jwSetFullscreen(false);if(i.link){window.open(i.link,"_blank")}return}function e(t){if(i.link){c.style.opacity=i.out}return}function h(t){if(i.hide){c.style.opacity=i.over}return}function q(){var v={textDecoration:"none",position:"absolute",cursor:"pointer"};v.display=i.hide?"none":"block";var u=i.position.toLowerCase().split("-");for(var t in u){v[u[t]]=i.margin}return v}function k(){if(i.hide){c.style.display="block";c.style.opacity=0;a.utils.fadeTo(c,i.out,0.1,parseFloat(c.style.opacity));n=setTimeout(function(){g()},i.timeout*1000)}}function g(){if(i.hide){a.utils.fadeTo(c,0,0.1,parseFloat(c.style.opacity))}}function s(t){if(t.newstate==a.api.events.state.BUFFERING){clearTimeout(n);k()}}return this}})(jwplayer);(function(a){var c={ended:a.api.events.state.IDLE,playing:a.api.events.state.PLAYING,pause:a.api.events.state.PAUSED,buffering:a.api.events.state.BUFFERING};var b=a.utils.css;a.html5.mediavideo=function(f,D){var H={abort:t,canplay:m,canplaythrough:m,durationchange:q,emptied:t,ended:m,error:l,loadeddata:q,loadedmetadata:q,loadstart:m,pause:m,play:K,playing:m,progress:A,ratechange:t,seeked:m,seeking:m,stalled:m,suspend:m,timeupdate:K,volumechange:t,waiting:m,canshowcurrentframe:t,dataunavailable:t,empty:t,load:e,loadedfirstframe:t};var I=new a.html5.eventdispatcher();a.utils.extend(this,I);var h=f;var x=D;var E;var G;var d=a.api.events.state.IDLE;var B=null;var n;var g=0;var z=false;var r=false;var M;var L;var i=[];var N;var C=false;function v(){return d}function e(O){}function t(O){}function m(O){if(c[O.type]){s(c[O.type])}}function s(O){if(C){return}if(n){O=a.api.events.state.IDLE}if(O==a.api.events.state.PAUSED&&d==a.api.events.state.IDLE){return}if(O==a.api.events.state.PLAYING&&d==a.api.events.state.IDLE){s(a.api.events.state.BUFFERING);I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:h.buffer});y();return}if(d!=O){var P=d;h.state=O;d=O;var Q=false;if(O==a.api.events.state.IDLE){p();if(h.position>=h.duration&&(h.position||h.duration)){Q=true}if(x.style.display!="none"&&!h.config.chromeless){x.style.display="none"}}I.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:P,newstate:O});if(Q){I.sendEvent(a.api.events.JWPLAYER_MEDIA_COMPLETE)}}n=false}function q(O){var P={height:O.target.videoHeight,width:O.target.videoWidth,duration:Math.round(O.target.duration*10)/10};if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(O.target.duration*10)/10}h.playlist[h.item]=a.utils.extend(h.playlist[h.item],P);I.sendEvent(a.api.events.JWPLAYER_MEDIA_META,{metadata:P})}function K(P){if(n){return}if(P!==undefined&&P.target!==undefined){if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(P.target.duration*10)/10}if(!z&&x.readyState>0){s(a.api.events.state.PLAYING)}if(d==a.api.events.state.PLAYING){if(!z&&x.readyState>0){z=true;try{x.currentTime=h.playlist[h.item].start}catch(O){}x.volume=h.volume/100;x.muted=h.mute}h.position=Math.round(P.target.currentTime*10)/10;I.sendEvent(a.api.events.JWPLAYER_MEDIA_TIME,{position:P.target.currentTime,duration:P.target.duration})}}A(P)}function y(){if(E===false&&d==a.api.events.state.BUFFERING){I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);E=true}}function F(){var O=(i[i.length-1]-i[0])/i.length;N=setTimeout(function(){if(!G){A({lengthComputable:true,loaded:1,total:1})}},O*10)}function A(Q){var P,O;if(Q!==undefined&&Q.lengthComputable&&Q.total){o();P=Q.loaded/Q.total*100;O=P/100*(h.duration-x.currentTime);if(50<P&&!G){clearTimeout(N);F()}}else{if((x.buffered!==undefined)&&(x.buffered.length>0)){maxBufferIndex=0;if(maxBufferIndex>=0){P=x.buffered.end(maxBufferIndex)/x.duration*100;O=x.buffered.end(maxBufferIndex)-x.currentTime}}}y();if(!G){if(P==100&&G===false){G=true}if(P!==null&&(P>h.buffer)){h.buffer=Math.round(P);I.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(P)})}}}function w(){if(B===null){B=setInterval(function(){K()},100)}}function p(){clearInterval(B);B=null}function l(Q){var P="There was an error: ";if((Q.target.error&&Q.target.tagName.toLowerCase()=="video")||Q.target.parentNode.error&&Q.target.parentNode.tagName.toLowerCase()=="video"){var O=Q.target.error===undefined?Q.target.parentNode.error:Q.target.error;switch(O.code){case O.MEDIA_ERR_ABORTED:P="You aborted the video playback: ";break;case O.MEDIA_ERR_NETWORK:P="A network error caused the video download to fail part-way: ";break;case O.MEDIA_ERR_DECODE:P="The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";break;case O.MEDIA_ERR_SRC_NOT_SUPPORTED:P="The video could not be loaded, either because the server or network failed or because the format is not supported: ";break;default:P="An unknown error occurred: ";break}}else{if(Q.target.tagName.toLowerCase()=="source"){L--;if(L>0){return}P="The video could not be loaded, either because the server or network failed or because the format is not supported: "}else{a.utils.log("Erroneous error received. Continuing...");return}}u();P+=j();C=true;I.sendEvent(a.api.events.JWPLAYER_ERROR,{error:P});return}function j(){var Q="";for(var P in M.levels){var O=M.levels[P];var R=x.ownerDocument.createElement("source");Q+=a.utils.getAbsolutePath(O.file);if(P<(M.levels.length-1)){Q+=", "}}return Q}this.getDisplayElement=function(){return x};this.play=function(){if(d!=a.api.events.state.PLAYING){if(x.style.display!="block"){x.style.display="block"}x.play();w();if(E){s(a.api.events.state.PLAYING)}}};this.pause=function(){x.pause();s(a.api.events.state.PAUSED)};this.seek=function(O){if(!(h.duration===0||isNaN(h.duration))&&!(h.position===0||isNaN(h.position))){x.currentTime=O;x.play()}};function u(){x.pause();p();h.position=0;n=true;s(a.api.events.state.IDLE)}this.stop=u;this.volume=function(O){x.volume=O/100;h.volume=O;I.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(O)})};this.mute=function(O){x.muted=O;h.mute=O;I.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:O})};this.resize=function(P,O){if(false){b(x,{width:P,height:O})}I.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE,{fullscreen:h.fullscreen,width:P,hieght:O})};this.fullscreen=function(O){if(O===true){this.resize("100%","100%")}else{this.resize(h.config.width,h.config.height)}};this.load=function(O){J(O);I.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);E=false;G=false;z=false;if(!h.config.chromeless&&!r){i=[];o();s(a.api.events.state.BUFFERING);setTimeout(function(){K()},25)}};function o(){var O=new Date().getTime();i.push(O)}this.hasChrome=function(){return r};function J(V){h.duration=V.duration;r=false;M=V;var Q=document.createElement("video");Q.preload="none";C=false;L=0;for(var P=0;P<V.levels.length;P++){var O=V.levels[P];if(a.utils.isYouTube(O.file)){delete Q;k(O.file);return}var R;if(O.type===undefined){var U=a.utils.extension(O.file);if(a.utils.extensionmap[U]!==undefined&&a.utils.extensionmap[U].html5!==undefined){R=a.utils.extensionmap[U].html5}}else{R=O.type}if(!R||Q.canPlayType(R)){var T=x.ownerDocument.createElement("source");T.src=a.utils.getAbsolutePath(O.file);if(R&&!a.utils.isLegacyAndroid()){T.type=R}L++;Q.appendChild(T)}}if(L===0){C=true;I.sendEvent(a.api.events.JWPLAYER_ERROR,{error:"The video could not be loaded because the format is not supported by your browser: "+j()})}if(h.config.chromeless){Q.poster=a.utils.getAbsolutePath(V.image);Q.controls="controls"}Q.style.top=x.style.top;Q.style.left=x.style.left;Q.style.width=x.style.width;Q.style.height=x.style.height;Q.style.zIndex=x.style.zIndex;Q.onload=e;Q.volume=0;x.parentNode.replaceChild(Q,x);Q.id=x.id;x=Q;for(var S in H){x.addEventListener(S,function(W){if(W.target.parentNode!==null){H[W.type](W)}},true)}}function k(S){var P=document.createElement("object");S=["http://www.youtube.com/v/",S.replace(/^[^v]+v.(.{11}).*/,"$1"),"&amp;hl=en_US&amp;fs=1&autoplay=1"].join("");var V={movie:S,allowFullScreen:"true",allowscriptaccess:"always"};for(var O in V){var T=document.createElement("param");T.name=O;T.value=V[O];P.appendChild(T)}var U=document.createElement("embed");var Q={src:S,type:"application/x-shockwave-flash",allowscriptaccess:"always",allowfullscreen:"true",width:document.getElementById(f.id).style.width,height:document.getElementById(f.id).style.height};for(var R in Q){U[R]=Q[R]}P.appendChild(U);P.style.position=x.style.position;P.style.top=x.style.top;P.style.left=x.style.left;P.style.width=document.getElementById(f.id).style.width;P.style.height=document.getElementById(f.id).style.height;P.style.zIndex=2147483000;x.parentNode.replaceChild(P,x);P.id=x.id;x=P;r=true}this.embed=J;return this}})(jwplayer);(function(jwplayer){var _configurableStateVariables=["width","height","start","duration","volume","mute","fullscreen","item","plugins","stretching"];jwplayer.html5.model=function(api,container,options){var _api=api;var _container=container;var _model={id:_container.id,playlist:[],state:jwplayer.api.events.state.IDLE,position:0,buffer:0,config:{width:480,height:320,item:-1,skin:undefined,file:undefined,image:undefined,start:0,duration:0,bufferlength:5,volume:90,mute:false,fullscreen:false,repeat:"none",stretching:jwplayer.utils.stretching.UNIFORM,autostart:false,debug:undefined,screencolor:undefined}};var _media;var _eventDispatcher=new jwplayer.html5.eventdispatcher();var _components=["display","logo","controlbar","dock"];jwplayer.utils.extend(_model,_eventDispatcher);for(var option in options){if(typeof options[option]=="string"){var type=/color$/.test(option)?"color":null;options[option]=jwplayer.utils.typechecker(options[option],type)}var config=_model.config;var path=option.split(".");for(var edge in path){if(edge==path.length-1){config[path[edge]]=options[option]}else{if(config[path[edge]]===undefined){config[path[edge]]={}}config=config[path[edge]]}}}for(var index in _configurableStateVariables){var configurableStateVariable=_configurableStateVariables[index];_model[configurableStateVariable]=_model.config[configurableStateVariable]}var pluginorder=_components.concat([]);if(_model.plugins!==undefined){if(typeof _model.plugins=="string"){var userplugins=_model.plugins.split(",");for(var userplugin in userplugins){if(typeof userplugins[userplugin]=="string"){pluginorder.push(userplugins[userplugin].replace(/^\s+|\s+$/g,""))}}}}if(typeof _model.config.chromeless=="undefined"&&jwplayer.utils.isIOS()){_model.config.chromeless=true}if(_model.config.chromeless){pluginorder=["logo"]}_model.plugins={order:pluginorder,config:{},object:{}};if(typeof _model.config.components!="undefined"){for(var component in _model.config.components){_model.plugins.config[component]=_model.config.components[component]}}for(var pluginIndex in _model.plugins.order){var pluginName=_model.plugins.order[pluginIndex];var pluginConfig=_model.config[pluginName]===undefined?{}:_model.config[pluginName];_model.plugins.config[pluginName]=_model.plugins.config[pluginName]===undefined?pluginConfig:jwplayer.utils.extend(_model.plugins.config[pluginName],pluginConfig);if(typeof _model.plugins.config[pluginName].position=="undefined"){_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.OVER}else{_model.plugins.config[pluginName].position=_model.plugins.config[pluginName].position.toString().toUpperCase()}}if(typeof _model.plugins.config.dock!="undefined"){if(typeof _model.plugins.config.dock!="object"){var position=_model.plugins.config.dock.toString().toUpperCase();_model.plugins.config.dock={position:position}}if(typeof _model.plugins.config.dock.position!="undefined"){_model.plugins.config.dock.align=_model.plugins.config.dock.position;_model.plugins.config.dock.position=jwplayer.html5.view.positions.OVER}}_model.loadPlaylist=function(arg,ready){var input;if(typeof arg=="string"){try{input=eval(arg)}catch(err){input=arg}}else{input=arg}var config;switch(jwplayer.utils.typeOf(input)){case"object":config=input;break;case"array":config={playlist:input};break;default:config={file:input};break}_model.playlist=new jwplayer.html5.playlist(config);if(_model.config.shuffle){_model.item=_getShuffleItem()}else{if(_model.config.item>=_model.playlist.length){_model.config.item=_model.playlist.length-1}else{if(_model.config.item<0){_model.config.item=0}}_model.item=_model.config.item}if(!ready){_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:_model.playlist})}_model.setActiveMediaProvider(_model.playlist[_model.item])};function _getShuffleItem(){var result=null;if(_model.playlist.length>1){while(result===null){result=Math.floor(Math.random()*_model.playlist.length);if(result==_model.item){result=null}}}else{result=0}return result}function forward(evt){if(evt.type==jwplayer.api.events.JWPLAYER_MEDIA_LOADED){_container=_media.getDisplayElement()}_eventDispatcher.sendEvent(evt.type,evt)}_model.setActiveMediaProvider=function(playlistItem){if(_media!==undefined){_media.resetEventListeners()}_media=new jwplayer.html5.mediavideo(_model,_container);_media.addGlobalListener(forward);if(_model.config.chromeless){_media.load(playlistItem)}return true};_model.getMedia=function(){return _media};_model.setupPlugins=function(){for(var plugin in _model.plugins.order){try{var pluginName=_model.plugins.order[plugin];if(jwplayer.html5[pluginName]!==undefined){_model.plugins.object[pluginName]=new jwplayer.html5[pluginName](_api,_model.plugins.config[pluginName])}else{_model.plugins.order.splice(plugin,plugin+1)}}catch(err){jwplayer.utils.log("Could not setup "+pluginName)}}};return _model}})(jwplayer);(function(a){a.html5.playlist=function(b){var d=[];if(b.playlist&&b.playlist instanceof Array&&b.playlist.length>0){for(var c in b.playlist){if(!isNaN(parseInt(c))){d.push(new a.html5.playlistitem(b.playlist[c]))}}}else{d.push(new a.html5.playlistitem(b))}return d}})(jwplayer);(function(a){a.html5.playlistitem=function(c){var b={author:"",date:"",description:"",image:"",link:"",mediaid:"",tags:"",title:"",provider:"",file:"",streamer:"",duration:-1,start:0,currentLevel:-1,levels:[]};for(var d in b){if(c[d]!==undefined){b[d]=c[d]}}if(b.levels.length===0){b.levels[0]=new a.html5.playlistitemlevel(b)}return b}})(jwplayer);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(b[c]!==undefined){d[c]=b[c]}}return d}})(jwplayer);(function(a){a.html5.skin=function(){var b={};var c=false;this.load=function(d,e){new a.html5.skinloader(d,function(f){c=true;b=f;e()},function(){new a.html5.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){a.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){return b[d].layout}return null}}})(jwplayer);(function(a){a.html5.skinloader=function(f,n,i){var m={};var c=n;var j=i;var e=true;var h;var l=f;var q=false;function k(){if(typeof l!="string"||l===""){d(a.html5.defaultSkin().xml)}else{a.utils.ajax(a.utils.getAbsolutePath(l),function(r){try{if(r.responseXML!==null){d(r.responseXML);return}}catch(s){}d(a.html5.defaultSkin().xml)},function(r){d(a.html5.defaultSkin().xml)})}}function d(w){var C=w.getElementsByTagName("component");if(C.length===0){return}for(var F=0;F<C.length;F++){var A=C[F].getAttribute("name");var z={settings:{},elements:{},layout:{}};m[A]=z;var E=C[F].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var D=0;D<E.length;D++){b(E[D],A)}var x=C[F].getElementsByTagName("settings")[0];if(x!==undefined&&x.childNodes.length>0){var I=x.getElementsByTagName("setting");for(var N=0;N<I.length;N++){var O=I[N].getAttribute("name");var G=I[N].getAttribute("value");var v=/color$/.test(O)?"color":null;m[A].settings[O]=a.utils.typechecker(G,v)}}var J=C[F].getElementsByTagName("layout")[0];if(J!==undefined&&J.childNodes.length>0){var K=J.getElementsByTagName("group");for(var u=0;u<K.length;u++){var y=K[u];m[A].layout[y.getAttribute("position")]={elements:[]};for(var M=0;M<y.attributes.length;M++){var B=y.attributes[M];m[A].layout[y.getAttribute("position")][B.name]=B.value}var L=y.getElementsByTagName("*");for(var t=0;t<L.length;t++){var r=L[t];m[A].layout[y.getAttribute("position")].elements.push({type:r.tagName});for(var s=0;s<r.attributes.length;s++){var H=r.attributes[s];m[A].layout[y.getAttribute("position")].elements[t][H.name]=H.value}if(m[A].layout[y.getAttribute("position")].elements[t].name===undefined){m[A].layout[y.getAttribute("position")].elements[t].name=r.tagName}}}}e=false;p()}}function p(){clearInterval(h);if(!q){h=setInterval(function(){o()},100)}}function b(w,v){var u=new Image();var r=w.getAttribute("name");var t=w.getAttribute("src");var y;if(t.indexOf("data:image/png;base64,")===0){y=t}else{var s=a.utils.getAbsolutePath(l);var x=s.substr(0,s.lastIndexOf("/"));y=[x,v,t].join("/")}m[v].elements[r]={height:0,width:0,src:"",ready:false};u.onload=function(z){g(u,r,v)};u.onerror=function(z){q=true;p();j()};u.src=y}function o(){for(var r in m){if(r!="properties"){for(var s in m[r].elements){if(!m[r].elements[s].ready){return}}}}if(e===false){clearInterval(h);c(m)}}function g(r,t,s){m[s].elements[t].height=r.height;m[s].elements[t].width=r.width;m[s].elements[t].src=r.src;m[s].elements[t].ready=true;p()}k()}})(jwplayer);(function(a){a.html5.api=function(b,k){var j={};var e=document.createElement("div");b.parentNode.replaceChild(e,b);e.id=b.id;j.version=a.version;j.id=e.id;var i=new a.html5.model(j,e,k);var g=new a.html5.view(j,e,i);var h=new a.html5.controller(j,e,i,g);j.skin=new a.html5.skin();j.jwPlay=function(l){if(typeof l=="undefined"){d()}else{if(l.toString().toLowerCase()=="true"){h.play()}else{h.pause()}}};j.jwPause=function(l){if(typeof l=="undefined"){d()}else{if(l.toString().toLowerCase()=="true"){h.pause()}else{h.play()}}};function d(){if(i.state==a.api.events.state.PLAYING||i.state==a.api.events.state.BUFFERING){h.pause()}else{h.play()}}j.jwStop=h.stop;j.jwSeek=h.seek;j.jwPlaylistItem=h.item;j.jwPlaylistNext=h.next;j.jwPlaylistPrev=h.prev;j.jwResize=h.resize;j.jwLoad=h.load;function f(l){return function(){return i[l]}}j.jwGetItem=f("item");j.jwGetPosition=f("position");j.jwGetDuration=f("duration");j.jwGetBuffer=f("buffer");j.jwGetWidth=f("width");j.jwGetHeight=f("height");j.jwGetFullscreen=f("fullscreen");j.jwSetFullscreen=h.setFullscreen;j.jwGetVolume=f("volume");j.jwSetVolume=h.setVolume;j.jwGetMute=f("mute");j.jwSetMute=h.setMute;j.jwGetStretching=f("stretching");j.jwGetState=f("state");j.jwGetVersion=function(){return j.version};j.jwGetPlaylist=function(){return i.playlist};j.jwAddEventListener=h.addEventListener;j.jwRemoveEventListener=h.removeEventListener;j.jwSendEvent=h.sendEvent;j.jwDockSetButton=function(o,l,m,n){if(i.plugins.object.dock&&i.plugins.object.dock.setButton){i.plugins.object.dock.setButton(o,l,m,n)}};j.jwGetLevel=function(){};j.jwGetBandwidth=function(){};j.jwGetLockState=function(){};j.jwLock=function(){};j.jwUnlock=function(){};function c(n,m,l){return function(){n.loadPlaylist(n.config,true);n.setupPlugins();m.setup(n.getMedia().getDisplayElement());var o={id:j.id,version:j.version};l.sendEvent(a.api.events.JWPLAYER_READY,o);if(playerReady!==undefined){playerReady(o)}if(window[n.config.playerReady]!==undefined){window[n.config.playerReady](o)}n.sendEvent(a.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:n.playlist});l.item(n.item)}}if(i.config.chromeless){setTimeout(c(i,g,h),25)}else{j.skin.load(i.config.skin,c(i,g,h))}return j}})(jwplayer); \ No newline at end of file
diff --git a/web/stream.gathering.org/resources/js/video-js-resolutions.js b/web/stream.gathering.org/resources/js/video-js-resolutions.js
deleted file mode 100644
index b07a7ac..0000000
--- a/web/stream.gathering.org/resources/js/video-js-resolutions.js
+++ /dev/null
@@ -1,432 +0,0 @@
-// Resolution switching support for videojs
-//
-// In this plugin I'm really going out of my way to *not* override the
-// core videojs namespace and to *not* change the core API. As a
-// result this plugin is not as efficient as it might be. It
-// initializes itself *for each player* as scoped variables inside the
-// plugin closure and grafts itself on to *the instance on which it was
-// called* rather than on the videojs player prototype. I don't expect
-// this to be a big deal for anybody.
-videojs.plugin('resolutions', function(options) {
- var player = this;
-
- // 'reduce' utility method
- // @param {Array} array to iterate over
- // @param {Function} iterator function for collector
- // @param {Array|Object|Number|String} initial collector
- // @return collector
- vjs.reduce = function(arr, fn, init, n) {
- if (!arr || arr.length === 0) { return; }
- for (var i=0,j=arr.length; i<j; i++) {
- init = fn.call(arr, init, arr[i], i);
- }
- return init;
- };
-
- this.resolutions_ = {
- options_: {},
-
- // takes an existing stream and stops the download entirely
- // without killing the player or disposing of the tech
- stopStream: function(){
- switch(player.techName){
- case "Html5":
- break;
- case "Flash":
- player.tech.el_.vjs_stop();
- break;
- }
-
- // this may cause flash or the native player to emit errors but
- // they are harmless
- player.src("");
- },
-
- // it is necessary to remove the sources from the DOM after
- // parsing them because otherwise the native player may be
- // inclined to stream both sources
- removeSources: function(el){
- var videoEl = player.el_.getElementsByTagName("video")[0];
-
- if (player.techName !== "Html5" || !videoEl) return;
-
- var srcs = videoEl.getElementsByTagName("source");
- for(var i=0;i<srcs.length;i++){
- videoEl.removeChild(srcs[i]);
- }
- },
-
- // buckets all parsed sources by their type ("video/mp4", for example)
- // @param {Array} array of sources:
- // [
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_hd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/ogv",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // @return sources grouped by type:
- // {
- // "video/mp4": [
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_hd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // "video/ogv": [
- // {
- // "data-res": "SD",
- // "type": "video/ogv",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // }
- bucketByTypes: function(sources){
- return vjs.reduce(sources, function(init, val, i){
- (init[val.type] = init[val.type] || []).push(val);
- return init;
- }, {}, player);
- },
-
- // takes parsed sources and selects the most appropriate source
- // taking into account resolution, technology support, and the
- // user's previous selections. also indexes the sources
- // @param {Array} array of sources:
- // [
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_hd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/ogv",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // @return {Object} single source:
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_jd",
- // "index": 0
- // }
- selectSource: function(sources){
- this.removeSources();
-
- var sourcesByType = this.bucketByTypes(sources);
- var typeAndTech = this.selectTypeAndTech(sources);
-
- if (!typeAndTech) return false;
-
- // even though we choose the best resolution for the user here, we
- // should remember the resolutions so that we can potentially
- // change resolution later
- this.options_['sourceResolutions'] = sourcesByType[typeAndTech.type];
-
- return this.selectResolution(this.options_['sourceResolutions']);
- },
-
- // takes parsed sources and returns the most appropriate
- // technology and video type
- // @param {Array} array of sources:
- // [
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_hd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/ogv",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // @return {Object} type/tech:
- // {
- // "type": "video/ogv",
- // "tech": "Html5"
- // }
- selectTypeAndTech: function(sources) {
- var techName;
- var tech;
-
- for (var i=0,j=player.options_['techOrder'];i<j.length;i++) {
- techName = videojs.capitalize(j[i]);
- tech = window['videojs'][techName];
-
- // Check if the browser supports this technology
- if (tech.isSupported()) {
- // Loop through each source object
- for (var a=0,b=sources;a<b.length;a++) {
- var source = b[a];
- // Check if source can be played with this technology
- //if (tech['canPlaySource'](source)) {
- return { type: source.type, tech: techName };
- //}
- }
- }
- }
- },
-
- // takes an array of sources of homogeneous type (ie. a complete
- // "bucket" from the output of bucketByTypes) and returns the best
- // source, taking into account the user's previous preferences
- // stored in local storage
- // @param {Array} homogeneous sources:
- // [
- // {
- // "data-res": "HD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_hd"
- // },
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // }
- // ]
- // @return {Object} singular best source:
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // "index": 1
- // }
- selectResolution: function(typeSources) {
- var defaultRes = 0;
- var supportsLocalStorage = !!window.localStorage;
-
- // check to see if any sources are marked as default
- videojs.obj.each(typeSources, function(i, s){
- // add the index here so we can reference it later
- s.index = parseInt(i, 10);
-
- if (s['data-default']) defaultRes = s.index;
- }, player);
-
- // if the user has previously selected a preference, check if
- // that preference is available. if not, use the source marked
- // default
- var preferredRes = defaultRes;
-
- // trying to follow the videojs code conventions of if statements
- if (supportsLocalStorage){
- var storedRes = parseInt(window.localStorage.getItem('videojs_preferred_res'), 10);
-
- if (!isNaN(storedRes))
- preferredRes = storedRes;
- }
-
- var maxRes = (typeSources.length - 1);
- var actualRes = preferredRes > maxRes ? maxRes : preferredRes;
-
- return typeSources[actualRes];
- }
- };
-
- // convenience method
- // @return {String} cached resolution label:
- // "SD"
- player.resolution = function(){
- return this.cache_.src.res;
- };
-
- // takes a source and switches the player's stream to it on the fly
- // @param {Object} singular source:
- // {
- // "data-default": "true",
- // "data-res": "SD",
- // "type": "video/mp4",
- // "src": "http://some_video_url_sd"
- // }
- player.changeResolution = function(new_source){
- // has the exact same source been chosen?
- if (this.cache_.src === new_source.src){
- this.trigger('resolutionchange');
- return this; // basically a no-op
- }
-
- // remember our position and playback state
- var curTime = this.currentTime();
- var remainPaused = this.paused();
-
- // pause playback
- this.pause();
-
- // attempts to stop the download of the existing video
- this.resolutions_.stopStream();
-
- // HTML5 tends to not recover from reloading the tech but it can
- // generally handle changing src. Flash generally cannot handle
- // changing src but can reload its tech.
- if (this.techName === "Html5"){
- this.src(new_source.src);
- } else {
- this.loadTech(this.techName, {src: new_source.src});
- }
-
- // when the technology is re-started, kick off the new stream
- this.ready(function() {
- this.one('loadeddata', vjs.bind(this, function() {
- this.currentTime(curTime);
- }));
-
- this.trigger('resolutionchange');
-
- if (!remainPaused) {
- this.load();
- this.play();
- }
-
- // remember this selection
- vjs.setLocalStorage('videojs_preferred_res', parseInt(new_source.index, 10));
- });
- };
-
- /* Resolution Menu Items
- ================================================================================ */
- var ResolutionMenuItem = videojs.MenuItem.extend({
- init: function(player, options){
- // Modify options for parent MenuItem class's init.
- options['label'] = options.source['data-res'];
- videojs.MenuItem.call(this, player, options);
-
- this.source = options.source;
- this.resolution = options.source['data-res'];
-
- this.player_.one('loadstart', vjs.bind(this, this.update));
- this.player_.on('resolutionchange', vjs.bind(this, this.update));
- }
- });
-
- ResolutionMenuItem.prototype.onClick = function(){
- videojs.MenuItem.prototype.onClick.call(this);
- this.player_.changeResolution(this.source);
- };
-
- ResolutionMenuItem.prototype.update = function(){
- var player = this.player_;
- if ((player.cache_['src'] === this.source.src)) {
- this.selected(true);
- } else {
- this.selected(false);
- }
- };
-
- /* Resolutions Button
- ================================================================================ */
- var ResolutionButton = videojs.MenuButton.extend({
- init: function(player, options) {
- videojs.MenuButton.call(this, player, options);
-
- if (this.items.length <= 1) {
- this.hide();
- }
- }
- });
-
- ResolutionButton.prototype.sourceResolutions_;
-
- ResolutionButton.prototype.sourceResolutions = function() {
- return this.sourceResolutions_;
- };
-
- ResolutionButton.prototype.onClick = function(e){
- // Only proceed if the target of the click was a DIV (just the button and its inner div, not the menu)
- // This prevents the menu from opening and closing when one of the menu items is clicked.
- if (e.target.className.match(/vjs-control-content/)) {
-
- // Toggle the 'touched' class
- this[this.el_.className.match(/touched/) ? "removeClass" : "addClass"]("touched");
- } else {
-
- // Remove the 'touched' class from all control bar buttons with menus to hide any already visible...
- var buttons = document.getElementsByClassName('vjs-menu-button');
- for(var i=0;i<buttons.length;i++){
- videojs.removeClass(buttons[i], 'touched');
- }
-
- this.removeClass('touched');
- }
- };
-
- ResolutionButton.prototype.createItems = function(){
- var resolutions = this.sourceResolutions_ = this.player_.resolutions_.options_['sourceResolutions'];
- var items = [];
- for (var i = 0; i < resolutions.length; i++) {
- items.push(new ResolutionMenuItem(this.player_, {
- 'source': this.sourceResolutions_[i]
- }));
- }
- return items;
- };
-
- /**
- * @constructor
- */
- ResolutionsButton = ResolutionButton.extend({
- /** @constructor */
- init: function(player, options, ready){
- ResolutionButton.call(this, player, options, ready);
- this.el_.setAttribute('aria-label','Resolutions Menu');
- this.el_.setAttribute('id',"vjs-resolutions-button");
- }
- });
-
- ResolutionsButton.prototype.kind_ = 'resolutions';
- ResolutionsButton.prototype.buttonText = 'Resolutions';
- ResolutionsButton.prototype.className = 'vjs-resolutions-button';
-
- // Add Button to controlBar
- videojs.obj.merge(player.controlBar.options_['children'], {
- 'resolutionsButton': {}
- });
-
- // let's get the party started!
- // we have to grab the parsed sources and select the source with our
- // resolution-aware source selector
- var source = player.resolutions_.selectSource(player.options_['sources']);
-
- // when the player is ready, add the resolution button to the control bar
- player.ready(function(){
- player.changeResolution(source);
- var button = new ResolutionsButton(player);
- player.controlBar.addChild(button);
- });
-});
diff --git a/web/stream.gathering.org/resources/js/video-quality-selector.js b/web/stream.gathering.org/resources/js/video-quality-selector.js
deleted file mode 100644
index 4a4714e..0000000
--- a/web/stream.gathering.org/resources/js/video-quality-selector.js
+++ /dev/null
@@ -1,387 +0,0 @@
-/**
- * Video.js Resolution Selector
- *
- * This plugin for Video.js adds a resolution selector option
- * to the toolbar. Usage:
- *
- * <video>
- * <source data-res="480" src="..." />
- * <source data-res="240" src="..." />
- * </video>
- */
-
-(function( _V_ ) {
-
- /***********************************************************************************
- * Define some helper functions
- ***********************************************************************************/
- var methods = {
-
- /**
- * In a future version, this can be made more intelligent,
- * but for now, we'll just add a "p" at the end if we are passed
- * numbers.
- *
- * @param (string) res The resolution to make a label for
- *
- * @returns (string) The label text string
- */
- res_label : function( res ) {
-
- return ( /^\d+$/.test( res ) ) ? res + 'p' : res;
- }
- };
-
- /***********************************************************************************
- * Setup our resolution menu items
- ***********************************************************************************/
- _V_.ResolutionMenuItem = _V_.MenuItem.extend({
-
- // Call variable to prevent the resolution change from being called twice
- call_count : 0,
-
- /** @constructor */
- init : function( player, options ){
-
- var touchstart = false;
-
- // Modify options for parent MenuItem class's init.
- options.label = methods.res_label( options.res );
- options.selected = ( options.res.toString() === player.getCurrentRes().toString() );
-
- // Call the parent constructor
- _V_.MenuItem.call( this, player, options );
-
- // Store the resolution as a property
- this.resolution = options.res;
-
- // Register our click and tap handlers
- this.on( ['click', 'tap'], this.onClick );
-
- // Toggle the selected class whenever the resolution changes
- player.on( 'changeRes', _V_.bind( this, function() {
-
- if ( this.resolution == player.getCurrentRes() ) {
-
- this.selected( true );
-
- } else {
-
- this.selected( false );
- }
-
- // Reset the call count
- this.call_count = 0;
- }));
- }
- });
-
- // Handle clicks on the menu items
- _V_.ResolutionMenuItem.prototype.onClick = function() {
-
- // Check if this has already been called
- if ( this.call_count > 0 ) { return; }
-
- // Call the player.changeRes method
- this.player().changeRes( this.resolution );
-
- // Increment the call counter
- this.call_count++;
- };
-
- /***********************************************************************************
- * Setup our resolution menu title item
- ***********************************************************************************/
- _V_.ResolutionTitleMenuItem = _V_.MenuItem.extend({
-
- init : function( player, options ) {
-
- // Call the parent constructor
- _V_.MenuItem.call( this, player, options );
-
- // No click handler for the menu title
- this.off( 'click' );
- }
- });
-
- /***********************************************************************************
- * Define our resolution selector button
- ***********************************************************************************/
- _V_.ResolutionSelector = _V_.MenuButton.extend({
-
- /** @constructor */
- init : function( player, options ) {
-
- // Add our list of available resolutions to the player object
- player.availableRes = options.available_res;
-
- // Call the parent constructor
- _V_.MenuButton.call( this, player, options );
-
- // Set the button text based on the option provided
- this.el().firstChild.firstChild.innerHTML = options.buttonText;
- }
- });
-
- // Set class for resolution selector button
- _V_.ResolutionSelector.prototype.className = 'vjs-res-button';
-
- // Create a menu item for each available resolution
- _V_.ResolutionSelector.prototype.createItems = function() {
-
- var player = this.player(),
- items = [],
- current_res;
-
- // Add the menu title item
- items.push( new _V_.ResolutionTitleMenuItem( player, {
-
- el : _V_.Component.prototype.createEl( 'li', {
-
- className : 'vjs-menu-title vjs-res-menu-title',
- innerHTML : player.localize( 'Quality' )
- })
- }));
-
- // Add an item for each available resolution
- for ( current_res in player.availableRes ) {
-
- // Don't add an item for the length attribute
- if ( 'length' == current_res ) { continue; }
-
- items.push( new _V_.ResolutionMenuItem( player, {
- res : current_res
- }));
- }
-
- // Sort the available resolutions in descending order
- items.sort(function( a, b ) {
-
- if ( typeof a.resolution == 'undefined' ) {
-
- return -1;
-
- } else {
-
- return parseInt( b.resolution ) - parseInt( a.resolution );
- }
- });
-
- return items;
- };
-
- /***********************************************************************************
- * Register the plugin with videojs, main plugin function
- ***********************************************************************************/
- _V_.plugin( 'resolutionSelector', function( options ) {
-
- // Only enable the plugin on HTML5 videos
- //if ( ! this.el().firstChild.canPlayType ) { return; }
-
- /*******************************************************************
- * Setup variables, parse settings
- *******************************************************************/
- var player = this,
- sources = player.options().sources,
- i = sources.length,
- j,
- found_type,
-
- // Override default options with those provided
- settings = _V_.util.mergeOptions({
-
- default_res : '', // (string) The resolution that should be selected by default ( '480' or '480,1080,240' )
- force_types : false // (array) List of media types. If passed, we need to have source for each type in each resolution or that resolution will not be an option
-
- }, options || {} ),
-
- available_res = { length : 0 },
- current_res,
- resolutionSelector,
-
- // Split default resolutions if set and valid, otherwise default to an empty array
- default_resolutions = ( settings.default_res && typeof settings.default_res == 'string' ) ? settings.default_res.split( ',' ) : [];
-
- // Get all of the available resoloutions
- while ( i > 0 ) {
-
- i--;
-
- // Skip sources that don't have data-res attributes
- if ( ! sources[i]['data-res'] ) { continue; }
-
- current_res = sources[i]['data-res'];
-
- if ( typeof available_res[current_res] !== 'object' ) {
-
- available_res[current_res] = [];
- available_res.length++;
- }
-
- available_res[current_res].push( sources[i] );
- }
-
- // Check for forced types
- if ( settings.force_types ) {
-
- // Loop through all available resoultions
- for ( current_res in available_res ) {
-
- // Don't count the length property as a resolution
- if ( 'length' == current_res ) { continue; }
-
- i = settings.force_types.length;
- found_types = 0;
-
- // Loop through all required types
- while ( i > 0 ) {
-
- i--;
-
- j = available_res[current_res].length;
-
- // Loop through all available sources in current resolution
- while ( j > 0 ) {
-
- j--;
-
- // Check if the current source matches the current type we're checking
- if ( settings.force_types[i] === available_res[current_res][j].type ) {
-
- found_types++;
- break;
- }
- }
- }
-
- // If we didn't find sources for all of the required types in the current res, remove it
- if ( found_types < settings.force_types.length ) {
-
- delete available_res[current_res];
- available_res.length--;
- }
- }
- }
-
- // Make sure we have at least 2 available resolutions before we add the button
- if ( available_res.length < 2 ) { return; }
-
- // Loop through the choosen default resolutions if there were any
- for ( i = 0; i < default_resolutions.length; i++ ) {
-
- // Set the video to start out with the first available default res
- if ( available_res[default_resolutions[i]] ) {
-
- player.src( available_res[default_resolutions[i]] );
- player.currentRes = default_resolutions[i];
- break;
- }
- }
-
- /*******************************************************************
- * Add methods to player object
- *******************************************************************/
-
- // Make sure we have player.localize() if it's not defined by Video.js
- if ( typeof player.localize !== 'function' ) {
-
- player.localize = function( string ) {
-
- return string;
- };
- }
-
- // Helper function to get the current resolution
- player.getCurrentRes = function() {
-
- if ( typeof player.currentRes !== 'undefined' ) {
-
- return player.currentRes;
-
- } else {
-
- try {
-
- return res = player.options().sources[0]['data-res'];
-
- } catch(e) {
-
- return '';
- }
- }
- };
-
- // Define the change res method
- player.changeRes = function( target_resolution ) {
-
- var video_el = player.el().firstChild,
- is_paused = player.paused(),
- current_time = player.currentTime(),
- button_nodes,
- button_node_count;
-
- // Do nothing if we aren't changing resolutions or if the resolution isn't defined
- if ( player.getCurrentRes() == target_resolution
- || ! player.availableRes
- || ! player.availableRes[target_resolution] ) { return; }
-
- // Make sure the loadedmetadata event will fire
- if ( 'none' == video_el.preload ) { video_el.preload = 'metadata'; }
-
- // Change the source and make sure we don't start the video over
- player.src( player.availableRes[target_resolution] ).one( 'loadedmetadata', function() {
-
- player.currentTime( current_time );
-
- // If the video was paused, don't show the poster image again
- player.addClass( 'vjs-has-started' );
-
- if ( ! is_paused ) { player.play(); }
- });
-
- // Save the newly selected resolution in our player options property
- player.currentRes = target_resolution;
-
- // Make sure the button has been added to the control bar
- if ( player.controlBar.resolutionSelector ) {
-
- button_nodes = player.controlBar.resolutionSelector.el().firstChild.children;
- button_node_count = button_nodes.length;
-
- // Update the button text
- while ( button_node_count > 0 ) {
-
- button_node_count--;
-
- if ( 'vjs-control-text' == button_nodes[button_node_count].className ) {
-
- button_nodes[button_node_count].innerHTML = methods.res_label( target_resolution );
- break;
- }
- }
- }
-
- // Update the classes to reflect the currently selected resolution
- player.trigger( 'changeRes' );
- };
-
- /*******************************************************************
- * Add the resolution selector button
- *******************************************************************/
-
- // Get the starting resolution
- current_res = player.getCurrentRes();
-
- if ( current_res ) { current_res = methods.res_label( current_res ); }
-
- // Add the resolution selector button
- resolutionSelector = new _V_.ResolutionSelector( player, {
- buttonText : player.localize( current_res || 'Quality' ),
- available_res : available_res
- });
-
- // Add the button to the control bar object and the DOM
- player.controlBar.resolutionSelector = player.controlBar.addChild( resolutionSelector );
- });
-
-})( videojs );
diff --git a/web/stream.gathering.org/resources/js/video.js b/web/stream.gathering.org/resources/js/video.js
deleted file mode 100644
index 8e312e1..0000000
--- a/web/stream.gathering.org/resources/js/video.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/*! Video.js v4.12.5 Copyright 2014 Brightcove, Inc. https://github.com/videojs/video.js/blob/master/LICENSE */
-(function() {var b=void 0,f=!0,j=null,l=!1;function m(){return function(){}}function n(a){return function(){return this[a]}}function q(a){return function(){return a}}var s;document.createElement("video");document.createElement("audio");document.createElement("track");
-function t(a,c,d){if("string"===typeof a){0===a.indexOf("#")&&(a=a.slice(1));if(t.Aa[a])return c&&t.log.warn('Player "'+a+'" is already initialised. Options will not be applied.'),d&&t.Aa[a].I(d),t.Aa[a];a=t.m(a)}if(!a||!a.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return a.player||new t.Player(a,c,d)}var videojs=window.videojs=t;t.ic="4.12";t.vd="https:"==document.location.protocol?"https://":"http://";t.VERSION="4.12.5";
-t.options={techOrder:["html5","flash"],html5:{},flash:{},width:300,height:150,defaultVolume:0,playbackRates:[],inactivityTimeout:2E3,children:{mediaLoader:{},posterImage:{},loadingSpinner:{},textTrackDisplay:{},bigPlayButton:{},controlBar:{},errorDisplay:{},textTrackSettings:{}},language:document.getElementsByTagName("html")[0].getAttribute("lang")||navigator.languages&&navigator.languages[0]||navigator.If||navigator.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."};
-"GENERATED_CDN_VSN"!==t.ic&&(videojs.options.flash.swf=t.vd+"vjs.zencdn.net/"+t.ic+"/video-js.swf");t.Jd=function(a,c){t.options.languages[a]=t.options.languages[a]!==b?t.$.ya(t.options.languages[a],c):c;return t.options.languages};t.Aa={};"function"===typeof define&&define.amd?define("videojs",[],function(){return videojs}):"object"===typeof exports&&"object"===typeof module&&(module.exports=videojs);t.Ea=t.CoreObject=m();
-t.Ea.extend=function(a){var c,d;a=a||{};c=a.init||a.l||this.prototype.init||this.prototype.l||m();d=function(){c.apply(this,arguments)};d.prototype=t.i.create(this.prototype);d.prototype.constructor=d;d.extend=t.Ea.extend;d.create=t.Ea.create;for(var e in a)a.hasOwnProperty(e)&&(d.prototype[e]=a[e]);return d};t.Ea.create=function(){var a=t.i.create(this.prototype);this.apply(a,arguments);return a};
-t.b=function(a,c,d){if(t.i.isArray(c))return v(t.b,a,c,d);var e=t.getData(a);e.G||(e.G={});e.G[c]||(e.G[c]=[]);d.s||(d.s=t.s++);e.G[c].push(d);e.ca||(e.disabled=l,e.ca=function(c){if(!e.disabled){c=t.Pb(c);var d=e.G[c.type];if(d)for(var d=d.slice(0),k=0,p=d.length;k<p&&!c.Rc();k++)d[k].call(a,c)}});1==e.G[c].length&&(a.addEventListener?a.addEventListener(c,e.ca,l):a.attachEvent&&a.attachEvent("on"+c,e.ca))};
-t.n=function(a,c,d){if(t.Mc(a)){var e=t.getData(a);if(e.G){if(t.i.isArray(c))return v(t.n,a,c,d);if(c){var g=e.G[c];if(g){if(d){if(d.s)for(e=0;e<g.length;e++)g[e].s===d.s&&g.splice(e--,1)}else e.G[c]=[];t.Ac(a,c)}}else for(g in e.G)c=g,e.G[c]=[],t.Ac(a,c)}}};t.Ac=function(a,c){var d=t.getData(a);0===d.G[c].length&&(delete d.G[c],a.removeEventListener?a.removeEventListener(c,d.ca,l):a.detachEvent&&a.detachEvent("on"+c,d.ca));t.ib(d.G)&&(delete d.G,delete d.ca,delete d.disabled);t.ib(d)&&t.cd(a)};
-t.Pb=function(a){function c(){return f}function d(){return l}if(!a||!a.Vb){var e=a||window.event;a={};for(var g in e)"layerX"!==g&&("layerY"!==g&&"keyLocation"!==g)&&("returnValue"==g&&e.preventDefault||(a[g]=e[g]));a.target||(a.target=a.srcElement||document);a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;a.preventDefault=function(){e.preventDefault&&e.preventDefault();a.returnValue=l;a.ie=c;a.defaultPrevented=f};a.ie=d;a.defaultPrevented=l;a.stopPropagation=function(){e.stopPropagation&&
-e.stopPropagation();a.cancelBubble=f;a.Vb=c};a.Vb=d;a.stopImmediatePropagation=function(){e.stopImmediatePropagation&&e.stopImmediatePropagation();a.Rc=c;a.stopPropagation()};a.Rc=d;if(a.clientX!=j){g=document.documentElement;var h=document.body;a.pageX=a.clientX+(g&&g.scrollLeft||h&&h.scrollLeft||0)-(g&&g.clientLeft||h&&h.clientLeft||0);a.pageY=a.clientY+(g&&g.scrollTop||h&&h.scrollTop||0)-(g&&g.clientTop||h&&h.clientTop||0)}a.which=a.charCode||a.keyCode;a.button!=j&&(a.button=a.button&1?0:a.button&
-4?1:a.button&2?2:0)}return a};t.o=function(a,c){var d=t.Mc(a)?t.getData(a):{},e=a.parentNode||a.ownerDocument;"string"===typeof c&&(c={type:c,target:a});c=t.Pb(c);d.ca&&d.ca.call(a,c);if(e&&!c.Vb()&&c.bubbles!==l)t.o(e,c);else if(!e&&!c.defaultPrevented&&(d=t.getData(c.target),c.target[c.type])){d.disabled=f;if("function"===typeof c.target[c.type])c.target[c.type]();d.disabled=l}return!c.defaultPrevented};
-t.N=function(a,c,d){function e(){t.n(a,c,e);d.apply(this,arguments)}if(t.i.isArray(c))return v(t.N,a,c,d);e.s=d.s=d.s||t.s++;t.b(a,c,e)};function v(a,c,d,e){t.wc.forEach(d,function(d){a(c,d,e)})}var w=Object.prototype.hasOwnProperty;t.e=function(a,c){var d;c=c||{};d=document.createElement(a||"div");t.i.da(c,function(a,c){-1!==a.indexOf("aria-")||"role"==a?d.setAttribute(a,c):d[a]=c});return d};t.ua=function(a){return a.charAt(0).toUpperCase()+a.slice(1)};t.i={};
-t.i.create=Object.create||function(a){function c(){}c.prototype=a;return new c};t.i.da=function(a,c,d){for(var e in a)w.call(a,e)&&c.call(d||this,e,a[e])};t.i.D=function(a,c){if(!c)return a;for(var d in c)w.call(c,d)&&(a[d]=c[d]);return a};t.i.Rd=function(a,c){var d,e,g;a=t.i.copy(a);for(d in c)w.call(c,d)&&(e=a[d],g=c[d],a[d]=t.i.jb(e)&&t.i.jb(g)?t.i.Rd(e,g):c[d]);return a};t.i.copy=function(a){return t.i.D({},a)};
-t.i.jb=function(a){return!!a&&"object"===typeof a&&"[object Object]"===a.toString()&&a.constructor===Object};t.i.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)};t.ke=function(a){return a!==a};t.bind=function(a,c,d){function e(){return c.apply(a,arguments)}c.s||(c.s=t.s++);e.s=d?d+"_"+c.s:c.s;return e};t.ta={};t.s=1;t.expando="vdata"+(new Date).getTime();t.getData=function(a){var c=a[t.expando];c||(c=a[t.expando]=t.s++);t.ta[c]||(t.ta[c]={});return t.ta[c]};
-t.Mc=function(a){a=a[t.expando];return!(!a||t.ib(t.ta[a]))};t.cd=function(a){var c=a[t.expando];if(c){delete t.ta[c];try{delete a[t.expando]}catch(d){a.removeAttribute?a.removeAttribute(t.expando):a[t.expando]=j}}};t.ib=function(a){for(var c in a)if(a[c]!==j)return l;return f};t.Oa=function(a,c){return-1!==(" "+a.className+" ").indexOf(" "+c+" ")};t.p=function(a,c){t.Oa(a,c)||(a.className=""===a.className?c:a.className+" "+c)};
-t.r=function(a,c){var d,e;if(t.Oa(a,c)){d=a.className.split(" ");for(e=d.length-1;0<=e;e--)d[e]===c&&d.splice(e,1);a.className=d.join(" ")}};t.A=t.e("video");var x=document.createElement("track");x.Wb="captions";x.hd="en";x.label="English";t.A.appendChild(x);t.P=navigator.userAgent;t.Cd=/iPhone/i.test(t.P);t.Bd=/iPad/i.test(t.P);t.Dd=/iPod/i.test(t.P);t.Ad=t.Cd||t.Bd||t.Dd;var aa=t,y;var z=t.P.match(/OS (\d+)_/i);y=z&&z[1]?z[1]:b;aa.kf=y;t.zd=/Android/i.test(t.P);var ba=t,B;
-var C=t.P.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i),D,E;C?(D=C[1]&&parseFloat(C[1]),E=C[2]&&parseFloat(C[2]),B=D&&E?parseFloat(C[1]+"."+C[2]):D?D:j):B=j;ba.hc=B;t.Ed=t.zd&&/webkit/i.test(t.P)&&2.3>t.hc;t.jc=/Firefox/i.test(t.P);t.lf=/Chrome/i.test(t.P);t.oa=/MSIE\s8\.0/.test(t.P);t.Eb=!!("ontouchstart"in window||window.xd&&document instanceof window.xd);t.wd="backgroundSize"in t.A.style;
-t.ed=function(a,c){t.i.da(c,function(c,e){e===j||"undefined"===typeof e||e===l?a.removeAttribute(c):a.setAttribute(c,e===f?"":e)})};t.Na=function(a){var c,d,e,g;c={};if(a&&a.attributes&&0<a.attributes.length){d=a.attributes;for(var h=d.length-1;0<=h;h--){e=d[h].name;g=d[h].value;if("boolean"===typeof a[e]||-1!==",autoplay,controls,loop,muted,default,".indexOf(","+e+","))g=g!==j?f:l;c[e]=g}}return c};
-t.vf=function(a,c){var d="";document.defaultView&&document.defaultView.getComputedStyle?d=document.defaultView.getComputedStyle(a,"").getPropertyValue(c):a.currentStyle&&(d=a["client"+c.substr(0,1).toUpperCase()+c.substr(1)]+"px");return d};t.Ub=function(a,c){c.firstChild?c.insertBefore(a,c.firstChild):c.appendChild(a)};t.cb={};t.m=function(a){0===a.indexOf("#")&&(a=a.slice(1));return document.getElementById(a)};
-t.Ma=function(a,c){c=c||a;var d=Math.floor(a%60),e=Math.floor(a/60%60),g=Math.floor(a/3600),h=Math.floor(c/60%60),k=Math.floor(c/3600);if(isNaN(a)||Infinity===a)g=e=d="-";g=0<g||0<k?g+":":"";return g+(((g||10<=h)&&10>e?"0"+e:e)+":")+(10>d?"0"+d:d)};t.Ld=function(){document.body.focus();document.onselectstart=q(l)};t.af=function(){document.onselectstart=q(f)};t.trim=function(a){return(a+"").replace(/^\s+|\s+$/g,"")};t.round=function(a,c){c||(c=0);return Math.round(a*Math.pow(10,c))/Math.pow(10,c)};
-t.Lb=function(a,c){return{length:1,start:function(){return a},end:function(){return c}}};t.Me=function(a){try{var c=window.localStorage||l;c&&(c.volume=a)}catch(d){22==d.code||1014==d.code?t.log("LocalStorage Full (VideoJS)",d):18==d.code?t.log("LocalStorage not allowed (VideoJS)",d):t.log("LocalStorage Error (VideoJS)",d)}};t.$d=function(a){a.match(/^https?:\/\//)||(a=t.e("div",{innerHTML:'<a href="'+a+'">x</a>'}).firstChild.href);return a};
-t.Ee=function(a){var c,d,e,g;g="protocol hostname port pathname search hash host".split(" ");d=t.e("a",{href:a});if(e=""===d.host&&"file:"!==d.protocol)c=t.e("div"),c.innerHTML='<a href="'+a+'"></a>',d=c.firstChild,c.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(c);a={};for(var h=0;h<g.length;h++)a[g[h]]=d[g[h]];"http:"===a.protocol&&(a.host=a.host.replace(/:80$/,""));"https:"===a.protocol&&(a.host=a.host.replace(/:443$/,""));e&&document.body.removeChild(c);return a};
-function F(a,c){var d,e;d=Array.prototype.slice.call(c);e=m();e=window.console||{log:e,warn:e,error:e};a?d.unshift(a.toUpperCase()+":"):a="log";t.log.history.push(d);d.unshift("VIDEOJS:");if(e[a].apply)e[a].apply(e,d);else e[a](d.join(" "))}t.log=function(){F(j,arguments)};t.log.history=[];t.log.error=function(){F("error",arguments)};t.log.warn=function(){F("warn",arguments)};
-t.Yd=function(a){var c,d;a.getBoundingClientRect&&a.parentNode&&(c=a.getBoundingClientRect());if(!c)return{left:0,top:0};a=document.documentElement;d=document.body;return{left:t.round(c.left+(window.pageXOffset||d.scrollLeft)-(a.clientLeft||d.clientLeft||0)),top:t.round(c.top+(window.pageYOffset||d.scrollTop)-(a.clientTop||d.clientTop||0))}};t.wc={};t.wc.forEach=function(a,c,d){if(t.i.isArray(a)&&c instanceof Function)for(var e=0,g=a.length;e<g;++e)c.call(d||t,a[e],e,a);return a};
-t.ff=function(a,c){var d,e,g,h,k,p,r;"string"===typeof a&&(a={uri:a});videojs.$.ya({method:"GET",timeout:45E3},a);c=c||m();p=function(){window.clearTimeout(k);c(j,e,e.response||e.responseText)};r=function(a){window.clearTimeout(k);if(!a||"string"===typeof a)a=Error(a);c(a,e)};d=window.XMLHttpRequest;"undefined"===typeof d&&(d=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw Error("This browser does not support XMLHttpRequest.");
-});e=new d;e.uri=a.uri;d=t.Ee(a.uri);g=window.location;d.protocol+d.host!==g.protocol+g.host&&window.XDomainRequest&&!("withCredentials"in e)?(e=new window.XDomainRequest,e.onload=p,e.onerror=r,e.onprogress=m(),e.ontimeout=m()):(h="file:"==d.protocol||"file:"==g.protocol,e.onreadystatechange=function(){if(4===e.readyState){if(e.Ye)return r("timeout");200===e.status||h&&0===e.status?p():r()}},a.timeout&&(k=window.setTimeout(function(){4!==e.readyState&&(e.Ye=f,e.abort())},a.timeout)));try{e.open(a.method||
-"GET",a.uri,f)}catch(u){r(u);return}a.withCredentials&&(e.withCredentials=f);a.responseType&&(e.responseType=a.responseType);try{e.send()}catch(A){r(A)}};t.$={};t.$.ya=function(a,c){var d,e,g;a=t.i.copy(a);for(d in c)c.hasOwnProperty(d)&&(e=a[d],g=c[d],a[d]=t.i.jb(e)&&t.i.jb(g)?t.$.ya(e,g):c[d]);return a};t.z=m();s=t.z.prototype;s.bb={};s.b=function(a,c){var d=this.addEventListener;this.addEventListener=Function.prototype;t.b(this,a,c);this.addEventListener=d};s.addEventListener=t.z.prototype.b;
-s.n=function(a,c){t.n(this,a,c)};s.removeEventListener=t.z.prototype.n;s.N=function(a,c){t.N(this,a,c)};s.o=function(a){var c=a.type||a;"string"===typeof a&&(a={type:c});a=t.Pb(a);if(this.bb[c]&&this["on"+c])this["on"+c](a);t.o(this,a)};s.dispatchEvent=t.z.prototype.o;
-t.a=t.Ea.extend({l:function(a,c,d){this.d=a;this.q=t.i.copy(this.q);c=this.options(c);this.Pa=c.id||c.el&&c.el.id;this.Pa||(this.Pa=(a.id&&a.id()||"no_player")+"_component_"+t.s++);this.te=c.name||j;this.c=c.el||this.e();this.R=[];this.fb={};this.gb={};this.Oc();this.I(d);if(c.dd!==l){var e,g;this.k().reportUserActivity&&(e=t.bind(this.k(),this.k().reportUserActivity),this.b("touchstart",function(){e();this.clearInterval(g);g=this.setInterval(e,250)}),a=function(){e();this.clearInterval(g)},this.b("touchmove",
-e),this.b("touchend",a),this.b("touchcancel",a))}}});s=t.a.prototype;s.dispose=function(){this.o({type:"dispose",bubbles:l});if(this.R)for(var a=this.R.length-1;0<=a;a--)this.R[a].dispose&&this.R[a].dispose();this.gb=this.fb=this.R=j;this.n();this.c.parentNode&&this.c.parentNode.removeChild(this.c);t.cd(this.c);this.c=j};s.d=f;s.k=n("d");s.options=function(a){return a===b?this.q:this.q=t.$.ya(this.q,a)};s.e=function(a,c){return t.e(a,c)};
-s.v=function(a){var c=this.d.language(),d=this.d.languages();return d&&d[c]&&d[c][a]?d[c][a]:a};s.m=n("c");s.va=function(){return this.B||this.c};s.id=n("Pa");s.name=n("te");s.children=n("R");s.ae=function(a){return this.fb[a]};s.ea=function(a){return this.gb[a]};
-s.ba=function(a,c){var d,e;"string"===typeof a?(e=a,c=c||{},d=c.componentClass||t.ua(e),c.name=e,d=new window.videojs[d](this.d||this,c)):d=a;this.R.push(d);"function"===typeof d.id&&(this.fb[d.id()]=d);(e=e||d.name&&d.name())&&(this.gb[e]=d);"function"===typeof d.el&&d.el()&&this.va().appendChild(d.el());return d};
-s.removeChild=function(a){"string"===typeof a&&(a=this.ea(a));if(a&&this.R){for(var c=l,d=this.R.length-1;0<=d;d--)if(this.R[d]===a){c=f;this.R.splice(d,1);break}c&&(this.fb[a.id()]=j,this.gb[a.name()]=j,(c=a.m())&&c.parentNode===this.va()&&this.va().removeChild(a.m()))}};
-s.Oc=function(){var a,c,d,e,g,h;a=this;c=a.options();if(d=c.children)if(h=function(d,e){c[d]!==b&&(e=c[d]);e!==l&&(a[d]=a.ba(d,e))},t.i.isArray(d))for(var k=0;k<d.length;k++)e=d[k],"string"==typeof e?(g=e,e={}):g=e.name,h(g,e);else t.i.da(d,h)};s.V=q("");
-s.b=function(a,c,d){var e,g,h;"string"===typeof a||t.i.isArray(a)?t.b(this.c,a,t.bind(this,c)):(e=t.bind(this,d),h=this,g=function(){h.n(a,c,e)},g.s=e.s,this.b("dispose",g),d=function(){h.n("dispose",g)},d.s=e.s,a.nodeName?(t.b(a,c,e),t.b(a,"dispose",d)):"function"===typeof a.b&&(a.b(c,e),a.b("dispose",d)));return this};
-s.n=function(a,c,d){!a||"string"===typeof a||t.i.isArray(a)?t.n(this.c,a,c):(d=t.bind(this,d),this.n("dispose",d),a.nodeName?(t.n(a,c,d),t.n(a,"dispose",d)):(a.n(c,d),a.n("dispose",d)));return this};s.N=function(a,c,d){var e,g,h;"string"===typeof a||t.i.isArray(a)?t.N(this.c,a,t.bind(this,c)):(e=t.bind(this,d),g=this,h=function(){g.n(a,c,h);e.apply(this,arguments)},h.s=e.s,this.b(a,c,h));return this};s.o=function(a){t.o(this.c,a);return this};
-s.I=function(a){a&&(this.wa?a.call(this):(this.nb===b&&(this.nb=[]),this.nb.push(a)));return this};s.Wa=function(){this.wa=f;var a=this.nb;if(a&&0<a.length){for(var c=0,d=a.length;c<d;c++)a[c].call(this);this.nb=[];this.o("ready")}};s.Oa=function(a){return t.Oa(this.c,a)};s.p=function(a){t.p(this.c,a);return this};s.r=function(a){t.r(this.c,a);return this};s.show=function(){this.r("vjs-hidden");return this};s.Y=function(){this.p("vjs-hidden");return this};function G(a){a.r("vjs-lock-showing")}
-s.width=function(a,c){return ca(this,"width",a,c)};s.height=function(a,c){return ca(this,"height",a,c)};s.Td=function(a,c){return this.width(a,f).height(c)};function ca(a,c,d,e){if(d!==b){if(d===j||t.ke(d))d=0;a.c.style[c]=-1!==(""+d).indexOf("%")||-1!==(""+d).indexOf("px")?d:"auto"===d?"":d+"px";e||a.o("resize");return a}if(!a.c)return 0;d=a.c.style[c];e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(a.c["offset"+t.ua(c)],10)}
-function da(a){var c,d,e,g,h,k,p,r;c=0;d=j;a.b("touchstart",function(a){1===a.touches.length&&(d=t.i.copy(a.touches[0]),c=(new Date).getTime(),g=f)});a.b("touchmove",function(a){1<a.touches.length?g=l:d&&(k=a.touches[0].pageX-d.pageX,p=a.touches[0].pageY-d.pageY,r=Math.sqrt(k*k+p*p),10<r&&(g=l))});h=function(){g=l};a.b("touchleave",h);a.b("touchcancel",h);a.b("touchend",function(a){d=j;g===f&&(e=(new Date).getTime()-c,200>e&&(a.preventDefault(),this.o("tap")))})}
-s.setTimeout=function(a,c){function d(){this.clearTimeout(e)}a=t.bind(this,a);var e=setTimeout(a,c);d.s="vjs-timeout-"+e;this.b("dispose",d);return e};s.clearTimeout=function(a){function c(){}clearTimeout(a);c.s="vjs-timeout-"+a;this.n("dispose",c);return a};s.setInterval=function(a,c){function d(){this.clearInterval(e)}a=t.bind(this,a);var e=setInterval(a,c);d.s="vjs-interval-"+e;this.b("dispose",d);return e};
-s.clearInterval=function(a){function c(){}clearInterval(a);c.s="vjs-interval-"+a;this.n("dispose",c);return a};t.w=t.a.extend({l:function(a,c){t.a.call(this,a,c);da(this);this.b("tap",this.u);this.b("click",this.u);this.b("focus",this.lb);this.b("blur",this.kb)}});s=t.w.prototype;
-s.e=function(a,c){var d;c=t.i.D({className:this.V(),role:"button","aria-live":"polite",tabIndex:0},c);d=t.a.prototype.e.call(this,a,c);c.innerHTML||(this.B=t.e("div",{className:"vjs-control-content"}),this.Jb=t.e("span",{className:"vjs-control-text",innerHTML:this.v(this.sa)||"Need Text"}),this.B.appendChild(this.Jb),d.appendChild(this.B));return d};s.V=function(){return"vjs-control "+t.a.prototype.V.call(this)};s.u=m();s.lb=function(){t.b(document,"keydown",t.bind(this,this.ja))};
-s.ja=function(a){if(32==a.which||13==a.which)a.preventDefault(),this.u()};s.kb=function(){t.n(document,"keydown",t.bind(this,this.ja))};t.U=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.Kd=this.ea(this.q.barName);this.handle=this.ea(this.q.handleName);this.b("mousedown",this.mb);this.b("touchstart",this.mb);this.b("focus",this.lb);this.b("blur",this.kb);this.b("click",this.u);this.b(a,"controlsvisible",this.update);this.b(a,this.Yc,this.update)}});s=t.U.prototype;
-s.e=function(a,c){c=c||{};c.className+=" vjs-slider";c=t.i.D({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c);return t.a.prototype.e.call(this,a,c)};s.mb=function(a){a.preventDefault();t.Ld();this.p("vjs-sliding");this.b(document,"mousemove",this.ka);this.b(document,"mouseup",this.za);this.b(document,"touchmove",this.ka);this.b(document,"touchend",this.za);this.ka(a)};s.ka=m();
-s.za=function(){t.af();this.r("vjs-sliding");this.n(document,"mousemove",this.ka);this.n(document,"mouseup",this.za);this.n(document,"touchmove",this.ka);this.n(document,"touchend",this.za);this.update()};s.update=function(){if(this.c){var a,c=this.Sb(),d=this.handle,e=this.Kd;if("number"!==typeof c||c!==c||0>c||Infinity===c)c=0;a=c;if(d){a=this.c.offsetWidth;var g=d.m().offsetWidth;a=g?g/a:0;c*=1-a;a=c+a/2;d.m().style.left=t.round(100*c,2)+"%"}e&&(e.m().style.width=t.round(100*a,2)+"%")}};
-function ea(a,c){var d,e,g,h;d=a.c;e=t.Yd(d);h=g=d.offsetWidth;d=a.handle;if(a.options().vertical)return h=e.top,e=c.changedTouches?c.changedTouches[0].pageY:c.pageY,d&&(d=d.m().offsetHeight,h+=d/2,g-=d),Math.max(0,Math.min(1,(h-e+g)/g));g=e.left;e=c.changedTouches?c.changedTouches[0].pageX:c.pageX;d&&(d=d.m().offsetWidth,g+=d/2,h-=d);return Math.max(0,Math.min(1,(e-g)/h))}s.lb=function(){this.b(document,"keydown",this.ja)};
-s.ja=function(a){if(37==a.which||40==a.which)a.preventDefault(),this.jd();else if(38==a.which||39==a.which)a.preventDefault(),this.kd()};s.kb=function(){this.n(document,"keydown",this.ja)};s.u=function(a){a.stopImmediatePropagation();a.preventDefault()};t.ga=t.a.extend();t.ga.prototype.defaultValue=0;t.ga.prototype.e=function(a,c){c=c||{};c.className+=" vjs-slider-handle";c=t.i.D({innerHTML:'<span class="vjs-control-text">'+this.defaultValue+"</span>"},c);return t.a.prototype.e.call(this,"div",c)};
-t.pa=t.a.extend();function fa(a,c){a.ba(c);c.b("click",t.bind(a,function(){G(this)}))}t.pa.prototype.e=function(){var a=this.options().Cc||"ul";this.B=t.e(a,{className:"vjs-menu-content"});a=t.a.prototype.e.call(this,"div",{append:this.B,className:"vjs-menu"});a.appendChild(this.B);t.b(a,"click",function(a){a.preventDefault();a.stopImmediatePropagation()});return a};t.M=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.selected(c.selected)}});
-t.M.prototype.e=function(a,c){return t.w.prototype.e.call(this,"li",t.i.D({className:"vjs-menu-item",innerHTML:this.v(this.q.label)},c))};t.M.prototype.u=function(){this.selected(f)};t.M.prototype.selected=function(a){a?(this.p("vjs-selected"),this.c.setAttribute("aria-selected",f)):(this.r("vjs-selected"),this.c.setAttribute("aria-selected",l))};
-t.O=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.update();this.b("keydown",this.ja);this.c.setAttribute("aria-haspopup",f);this.c.setAttribute("role","button")}});s=t.O.prototype;s.update=function(){var a=this.Ja();this.xa&&this.removeChild(this.xa);this.xa=a;this.ba(a);this.H&&0===this.H.length?this.Y():this.H&&1<this.H.length&&this.show()};s.Ha=l;
-s.Ja=function(){var a=new t.pa(this.d);this.options().title&&a.va().appendChild(t.e("li",{className:"vjs-menu-title",innerHTML:t.ua(this.options().title),We:-1}));if(this.H=this.createItems())for(var c=0;c<this.H.length;c++)fa(a,this.H[c]);return a};s.Ia=m();s.V=function(){return this.className+" vjs-menu-button "+t.w.prototype.V.call(this)};s.lb=m();s.kb=m();s.u=function(){this.N("mouseout",t.bind(this,function(){G(this.xa);this.c.blur()}));this.Ha?H(this):ga(this)};
-s.ja=function(a){32==a.which||13==a.which?(this.Ha?H(this):ga(this),a.preventDefault()):27==a.which&&(this.Ha&&H(this),a.preventDefault())};function ga(a){a.Ha=f;a.xa.p("vjs-lock-showing");a.c.setAttribute("aria-pressed",f);a.H&&0<a.H.length&&a.H[0].m().focus()}function H(a){a.Ha=l;G(a.xa);a.c.setAttribute("aria-pressed",l)}t.J=function(a){"number"===typeof a?this.code=a:"string"===typeof a?this.message=a:"object"===typeof a&&t.i.D(this,a);this.message||(this.message=t.J.Sd[this.code]||"")};
-t.J.prototype.code=0;t.J.prototype.message="";t.J.prototype.status=j;t.J.hb="MEDIA_ERR_CUSTOM MEDIA_ERR_ABORTED MEDIA_ERR_NETWORK MEDIA_ERR_DECODE MEDIA_ERR_SRC_NOT_SUPPORTED MEDIA_ERR_ENCRYPTED".split(" ");
-t.J.Sd={1:"You aborted the video playback",2:"A network error caused the video download to fail part-way.",3:"The video playback was aborted due to a corruption problem or because the video used features your browser did not support.",4:"The video could not be loaded, either because the server or network failed or because the format is not supported.",5:"The video is encrypted and we do not have the keys to decrypt it."};for(var I=0;I<t.J.hb.length;I++)t.J[t.J.hb[I]]=I,t.J.prototype[t.J.hb[I]]=I;
-var J,ha,K,L;
-J=["requestFullscreen exitFullscreen fullscreenElement fullscreenEnabled fullscreenchange fullscreenerror".split(" "),"webkitRequestFullscreen webkitExitFullscreen webkitFullscreenElement webkitFullscreenEnabled webkitfullscreenchange webkitfullscreenerror".split(" "),"webkitRequestFullScreen webkitCancelFullScreen webkitCurrentFullScreenElement webkitCancelFullScreen webkitfullscreenchange webkitfullscreenerror".split(" "),"mozRequestFullScreen mozCancelFullScreen mozFullScreenElement mozFullScreenEnabled mozfullscreenchange mozfullscreenerror".split(" "),"msRequestFullscreen msExitFullscreen msFullscreenElement msFullscreenEnabled MSFullscreenChange MSFullscreenError".split(" ")];
-ha=J[0];for(L=0;L<J.length;L++)if(J[L][1]in document){K=J[L];break}if(K){t.cb.Rb={};for(L=0;L<K.length;L++)t.cb.Rb[ha[L]]=K[L]}
-t.Player=t.a.extend({l:function(a,c,d){this.L=a;a.id=a.id||"vjs_video_"+t.s++;this.Xe=a&&t.Na(a);c=t.i.D(ia(a),c);this.Tc=c.language||t.options.language;this.ne=c.languages||t.options.languages;this.K={};this.Zc=c.poster||"";this.Kb=!!c.controls;a.controls=l;c.dd=l;ja(this,"audio"===this.L.nodeName.toLowerCase());t.a.call(this,this,c,d);this.controls()?this.p("vjs-controls-enabled"):this.p("vjs-controls-disabled");ja(this)&&this.p("vjs-audio");t.Aa[this.Pa]=this;c.plugins&&t.i.da(c.plugins,function(a,
-c){this[a](c)},this);var e,g,h,k,p;e=t.bind(this,this.reportUserActivity);this.b("mousedown",function(){e();this.clearInterval(g);g=this.setInterval(e,250)});this.b("mousemove",function(a){if(a.screenX!=k||a.screenY!=p)k=a.screenX,p=a.screenY,e()});this.b("mouseup",function(){e();this.clearInterval(g)});this.b("keydown",e);this.b("keyup",e);this.setInterval(function(){if(this.Da){this.Da=l;this.userActive(f);this.clearTimeout(h);var a=this.options().inactivityTimeout;0<a&&(h=this.setTimeout(function(){this.Da||
-this.userActive(l)},a))}},250)}});s=t.Player.prototype;s.language=function(a){if(a===b)return this.Tc;this.Tc=a;return this};s.languages=n("ne");s.q=t.options;s.dispose=function(){this.o("dispose");this.n("dispose");t.Aa[this.Pa]=j;this.L&&this.L.player&&(this.L.player=j);this.c&&this.c.player&&(this.c.player=j);this.h&&this.h.dispose();t.a.prototype.dispose.call(this)};
-function ia(a){var c,d,e={sources:[],tracks:[]};c=t.Na(a);d=c["data-setup"];d!==j&&t.i.D(c,t.JSON.parse(d||"{}"));t.i.D(e,c);if(a.hasChildNodes()){var g,h;a=a.childNodes;g=0;for(h=a.length;g<h;g++)c=a[g],d=c.nodeName.toLowerCase(),"source"===d?e.sources.push(t.Na(c)):"track"===d&&e.tracks.push(t.Na(c))}return e}
-s.e=function(){var a=this.c=t.a.prototype.e.call(this,"div"),c=this.L,d;c.removeAttribute("width");c.removeAttribute("height");d=t.Na(c);t.i.da(d,function(c){"class"==c?a.className=d[c]:a.setAttribute(c,d[c])});c.id+="_html5_api";c.className="vjs-tech";c.player=a.player=this;this.p("vjs-paused");this.width(this.q.width,f);this.height(this.q.height,f);c.ge=c.networkState;c.parentNode&&c.parentNode.insertBefore(a,c);t.Ub(c,a);this.c=a;this.b("loadstart",this.xe);this.b("waiting",this.De);this.b(["canplay",
-"canplaythrough","playing","ended"],this.Ce);this.b("seeking",this.Ae);this.b("seeked",this.ze);this.b("ended",this.ue);this.b("play",this.$b);this.b("firstplay",this.ve);this.b("pause",this.Zb);this.b("progress",this.ye);this.b("durationchange",this.Wc);this.b("fullscreenchange",this.we);return a};
-function ka(a,c,d){a.h&&(a.wa=l,a.h.dispose(),a.h=l);"Html5"!==c&&a.L&&(t.f.Mb(a.L),a.L=j);a.Ua=c;a.wa=l;var e=t.i.D({source:d,parentEl:a.c},a.q[c.toLowerCase()]);d&&(a.Gc=d.type,d.src==a.K.src&&0<a.K.currentTime&&(e.startTime=a.K.currentTime),a.K.src=d.src);a.h=new window.videojs[c](a,e);a.h.I(function(){this.d.Wa()})}s.xe=function(){this.r("vjs-ended");this.error(j);this.paused()?la(this,l):this.o("firstplay")};s.Nc=l;
-function la(a,c){c!==b&&a.Nc!==c&&((a.Nc=c)?(a.p("vjs-has-started"),a.o("firstplay")):a.r("vjs-has-started"))}s.$b=function(){this.r("vjs-ended");this.r("vjs-paused");this.p("vjs-playing");la(this,f)};s.De=function(){this.p("vjs-waiting")};s.Ce=function(){this.r("vjs-waiting")};s.Ae=function(){this.p("vjs-seeking")};s.ze=function(){this.r("vjs-seeking")};s.ve=function(){this.q.starttime&&this.currentTime(this.q.starttime);this.p("vjs-has-started")};s.Zb=function(){this.r("vjs-playing");this.p("vjs-paused")};
-s.ye=function(){1==this.bufferedPercent()&&this.o("loadedalldata")};s.ue=function(){this.p("vjs-ended");this.q.loop?(this.currentTime(0),this.play()):this.paused()||this.pause()};s.Wc=function(){var a=M(this,"duration");a&&(0>a&&(a=Infinity),this.duration(a),Infinity===a?this.p("vjs-live"):this.r("vjs-live"))};s.we=function(){this.isFullscreen()?this.p("vjs-fullscreen"):this.r("vjs-fullscreen")};
-function N(a,c,d){if(a.h&&!a.h.wa)a.h.I(function(){this[c](d)});else try{a.h[c](d)}catch(e){throw t.log(e),e;}}function M(a,c){if(a.h&&a.h.wa)try{return a.h[c]()}catch(d){throw a.h[c]===b?t.log("Video.js: "+c+" method not defined for "+a.Ua+" playback technology.",d):"TypeError"==d.name?(t.log("Video.js: "+c+" unavailable on "+a.Ua+" playback technology element.",d),a.h.wa=l):t.log(d),d;}}s.play=function(){N(this,"play");return this};s.pause=function(){N(this,"pause");return this};
-s.paused=function(){return M(this,"paused")===l?l:f};s.currentTime=function(a){return a!==b?(N(this,"setCurrentTime",a),this):this.K.currentTime=M(this,"currentTime")||0};s.duration=function(a){if(a!==b)return this.K.duration=parseFloat(a),this;this.K.duration===b&&this.Wc();return this.K.duration||0};s.remainingTime=function(){return this.duration()-this.currentTime()};s.buffered=function(){var a=M(this,"buffered");if(!a||!a.length)a=t.Lb(0,0);return a};
-s.bufferedPercent=function(){var a=this.duration(),c=this.buffered(),d=0,e,g;if(!a)return 0;for(var h=0;h<c.length;h++)e=c.start(h),g=c.end(h),g>a&&(g=a),d+=g-e;return d/a};s.volume=function(a){if(a!==b)return a=Math.max(0,Math.min(1,parseFloat(a))),this.K.volume=a,N(this,"setVolume",a),t.Me(a),this;a=parseFloat(M(this,"volume"));return isNaN(a)?1:a};s.muted=function(a){return a!==b?(N(this,"setMuted",a),this):M(this,"muted")||l};s.Ta=function(){return M(this,"supportsFullScreen")||l};s.Qc=l;
-s.isFullscreen=function(a){return a!==b?(this.Qc=!!a,this):this.Qc};s.isFullScreen=function(a){t.log.warn('player.isFullScreen() has been deprecated, use player.isFullscreen() with a lowercase "s")');return this.isFullscreen(a)};
-s.requestFullscreen=function(){var a=t.cb.Rb;this.isFullscreen(f);a?(t.b(document,a.fullscreenchange,t.bind(this,function(c){this.isFullscreen(document[a.fullscreenElement]);this.isFullscreen()===l&&t.n(document,a.fullscreenchange,arguments.callee);this.o("fullscreenchange")})),this.c[a.requestFullscreen]()):this.h.Ta()?N(this,"enterFullScreen"):(this.Jc(),this.o("fullscreenchange"));return this};
-s.requestFullScreen=function(){t.log.warn('player.requestFullScreen() has been deprecated, use player.requestFullscreen() with a lowercase "s")');return this.requestFullscreen()};s.exitFullscreen=function(){var a=t.cb.Rb;this.isFullscreen(l);if(a)document[a.exitFullscreen]();else this.h.Ta()?N(this,"exitFullScreen"):(this.Nb(),this.o("fullscreenchange"));return this};s.cancelFullScreen=function(){t.log.warn("player.cancelFullScreen() has been deprecated, use player.exitFullscreen()");return this.exitFullscreen()};
-s.Jc=function(){this.je=f;this.Ud=document.documentElement.style.overflow;t.b(document,"keydown",t.bind(this,this.Kc));document.documentElement.style.overflow="hidden";t.p(document.body,"vjs-full-window");this.o("enterFullWindow")};s.Kc=function(a){27===a.keyCode&&(this.isFullscreen()===f?this.exitFullscreen():this.Nb())};s.Nb=function(){this.je=l;t.n(document,"keydown",this.Kc);document.documentElement.style.overflow=this.Ud;t.r(document.body,"vjs-full-window");this.o("exitFullWindow")};
-s.selectSource=function(a){for(var c=0,d=this.q.techOrder;c<d.length;c++){var e=t.ua(d[c]),g=window.videojs[e];if(g){if(g.isSupported())for(var h=0,k=a;h<k.length;h++){var p=k[h];if(g.canPlaySource(p))return{source:p,h:e}}}else t.log.error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.')}return l};
-s.src=function(a){if(a===b)return M(this,"src");t.i.isArray(a)?ma(this,a):"string"===typeof a?this.src({src:a}):a instanceof Object&&(a.type&&!window.videojs[this.Ua].canPlaySource(a)?ma(this,[a]):(this.K.src=a.src,this.Gc=a.type||"",this.I(function(){window.videojs[this.Ua].prototype.hasOwnProperty("setSource")?N(this,"setSource",a):N(this,"src",a.src);"auto"==this.q.preload&&this.load();this.q.autoplay&&this.play()})));return this};
-function ma(a,c){var d=a.selectSource(c);d?d.h===a.Ua?a.src(d.source):ka(a,d.h,d.source):(a.setTimeout(function(){this.error({code:4,message:this.v(this.options().notSupportedMessage)})},0),a.Wa())}s.load=function(){N(this,"load");return this};s.currentSrc=function(){return M(this,"currentSrc")||this.K.src||""};s.Qd=function(){return this.Gc||""};s.Qa=function(a){return a!==b?(N(this,"setPreload",a),this.q.preload=a,this):M(this,"preload")};
-s.autoplay=function(a){return a!==b?(N(this,"setAutoplay",a),this.q.autoplay=a,this):M(this,"autoplay")};s.loop=function(a){return a!==b?(N(this,"setLoop",a),this.q.loop=a,this):M(this,"loop")};s.poster=function(a){if(a===b)return this.Zc;a||(a="");this.Zc=a;N(this,"setPoster",a);this.o("posterchange");return this};
-s.controls=function(a){return a!==b?(a=!!a,this.Kb!==a&&((this.Kb=a)?(this.r("vjs-controls-disabled"),this.p("vjs-controls-enabled"),this.o("controlsenabled")):(this.r("vjs-controls-enabled"),this.p("vjs-controls-disabled"),this.o("controlsdisabled"))),this):this.Kb};t.Player.prototype.ec;s=t.Player.prototype;
-s.usingNativeControls=function(a){return a!==b?(a=!!a,this.ec!==a&&((this.ec=a)?(this.p("vjs-using-native-controls"),this.o("usingnativecontrols")):(this.r("vjs-using-native-controls"),this.o("usingcustomcontrols"))),this):this.ec};s.ia=j;s.error=function(a){if(a===b)return this.ia;if(a===j)return this.ia=a,this.r("vjs-error"),this;this.ia=a instanceof t.J?a:new t.J(a);this.o("error");this.p("vjs-error");t.log.error("(CODE:"+this.ia.code+" "+t.J.hb[this.ia.code]+")",this.ia.message,this.ia);return this};
-s.ended=function(){return M(this,"ended")};s.seeking=function(){return M(this,"seeking")};s.Da=f;s.reportUserActivity=function(){this.Da=f};s.dc=f;s.userActive=function(a){return a!==b?(a=!!a,a!==this.dc&&((this.dc=a)?(this.Da=f,this.r("vjs-user-inactive"),this.p("vjs-user-active"),this.o("useractive")):(this.Da=l,this.h&&this.h.N("mousemove",function(a){a.stopPropagation();a.preventDefault()}),this.r("vjs-user-active"),this.p("vjs-user-inactive"),this.o("userinactive"))),this):this.dc};
-s.playbackRate=function(a){return a!==b?(N(this,"setPlaybackRate",a),this):this.h&&this.h.featuresPlaybackRate?M(this,"playbackRate"):1};s.Pc=l;function ja(a,c){return c!==b?(a.Pc=!!c,a):a.Pc}s.networkState=function(){return M(this,"networkState")};s.readyState=function(){return M(this,"readyState")};s.textTracks=function(){return this.h&&this.h.textTracks()};s.Z=function(){return this.h&&this.h.remoteTextTracks()};s.addTextTrack=function(a,c,d){return this.h&&this.h.addTextTrack(a,c,d)};
-s.ha=function(a){return this.h&&this.h.addRemoteTextTrack(a)};s.Ba=function(a){this.h&&this.h.removeRemoteTextTrack(a)};t.ub=t.a.extend();t.ub.prototype.q={wf:"play",children:{playToggle:{},currentTimeDisplay:{},timeDivider:{},durationDisplay:{},remainingTimeDisplay:{},liveDisplay:{},progressControl:{},fullscreenToggle:{},volumeControl:{},muteToggle:{},playbackRateMenuButton:{},subtitlesButton:{},captionsButton:{},chaptersButton:{}}};t.ub.prototype.e=function(){return t.e("div",{className:"vjs-control-bar"})};
-t.kc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});t.kc.prototype.e=function(){var a=t.a.prototype.e.call(this,"div",{className:"vjs-live-controls vjs-control"});this.B=t.e("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.v("Stream Type")+"</span>"+this.v("LIVE"),"aria-live":"off"});a.appendChild(this.B);return a};t.nc=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.b(a,"play",this.$b);this.b(a,"pause",this.Zb)}});s=t.nc.prototype;s.sa="Play";
-s.V=function(){return"vjs-play-control "+t.w.prototype.V.call(this)};s.u=function(){this.d.paused()?this.d.play():this.d.pause()};s.$b=function(){this.r("vjs-paused");this.p("vjs-playing");this.c.children[0].children[0].innerHTML=this.v("Pause")};s.Zb=function(){this.r("vjs-playing");this.p("vjs-paused");this.c.children[0].children[0].innerHTML=this.v("Play")};t.vb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ma)}});
-t.vb.prototype.e=function(){var a=t.a.prototype.e.call(this,"div",{className:"vjs-current-time vjs-time-controls vjs-control"});this.B=t.e("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00',"aria-live":"off"});a.appendChild(this.B);return a};t.vb.prototype.ma=function(){var a=this.d.ob?this.d.K.currentTime:this.d.currentTime();this.B.innerHTML='<span class="vjs-control-text">'+this.v("Current Time")+"</span> "+t.Ma(a,this.d.duration())};
-t.wb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ma)}});t.wb.prototype.e=function(){var a=t.a.prototype.e.call(this,"div",{className:"vjs-duration vjs-time-controls vjs-control"});this.B=t.e("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">'+this.v("Duration Time")+"</span> 0:00","aria-live":"off"});a.appendChild(this.B);return a};
-t.wb.prototype.ma=function(){var a=this.d.duration();a&&(this.B.innerHTML='<span class="vjs-control-text">'+this.v("Duration Time")+"</span> "+t.Ma(a))};t.tc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});t.tc.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-time-divider",innerHTML:"<div><span>/</span></div>"})};t.Db=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"timeupdate",this.ma)}});
-t.Db.prototype.e=function(){var a=t.a.prototype.e.call(this,"div",{className:"vjs-remaining-time vjs-time-controls vjs-control"});this.B=t.e("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">'+this.v("Remaining Time")+"</span> -0:00","aria-live":"off"});a.appendChild(this.B);return a};t.Db.prototype.ma=function(){this.d.duration()&&(this.B.innerHTML='<span class="vjs-control-text">'+this.v("Remaining Time")+"</span> -"+t.Ma(this.d.remainingTime()))};
-t.Za=t.w.extend({l:function(a,c){t.w.call(this,a,c)}});t.Za.prototype.sa="Fullscreen";t.Za.prototype.V=function(){return"vjs-fullscreen-control "+t.w.prototype.V.call(this)};t.Za.prototype.u=function(){this.d.isFullscreen()?(this.d.exitFullscreen(),this.Jb.innerHTML=this.v("Fullscreen")):(this.d.requestFullscreen(),this.Jb.innerHTML=this.v("Non-Fullscreen"))};t.Cb=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});t.Cb.prototype.q={children:{seekBar:{}}};
-t.Cb.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-progress-control vjs-control"})};t.qc=t.U.extend({l:function(a,c){t.U.call(this,a,c);this.b(a,"timeupdate",this.Ca);a.I(t.bind(this,this.Ca))}});s=t.qc.prototype;s.q={children:{loadProgressBar:{},playProgressBar:{},seekHandle:{}},barName:"playProgressBar",handleName:"seekHandle"};s.Yc="timeupdate";s.e=function(){return t.U.prototype.e.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})};
-s.Ca=function(){var a=this.d.ob?this.d.K.currentTime:this.d.currentTime();this.c.setAttribute("aria-valuenow",t.round(100*this.Sb(),2));this.c.setAttribute("aria-valuetext",t.Ma(a,this.d.duration()))};s.Sb=function(){return this.d.currentTime()/this.d.duration()};s.mb=function(a){t.U.prototype.mb.call(this,a);this.d.ob=f;this.d.p("vjs-scrubbing");this.df=!this.d.paused();this.d.pause()};s.ka=function(a){a=ea(this,a)*this.d.duration();a==this.d.duration()&&(a-=0.1);this.d.currentTime(a)};
-s.za=function(a){t.U.prototype.za.call(this,a);this.d.ob=l;this.d.r("vjs-scrubbing");this.df&&this.d.play()};s.kd=function(){this.d.currentTime(this.d.currentTime()+5)};s.jd=function(){this.d.currentTime(this.d.currentTime()-5)};t.zb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.b(a,"progress",this.update)}});t.zb.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.v("Loaded")+"</span>: 0%</span>"})};
-t.zb.prototype.update=function(){var a,c,d,e,g=this.d.buffered();a=this.d.duration();var h,k=this.d;h=k.buffered();k=k.duration();h=h.end(h.length-1);h>k&&(h=k);k=this.c.children;this.c.style.width=100*(h/a||0)+"%";for(a=0;a<g.length;a++)c=g.start(a),d=g.end(a),(e=k[a])||(e=this.c.appendChild(t.e())),e.style.left=100*(c/h||0)+"%",e.style.width=100*((d-c)/h||0)+"%";for(a=k.length;a>g.length;a--)this.c.removeChild(k[a-1])};t.mc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
-t.mc.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-play-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.v("Progress")+"</span>: 0%</span>"})};t.$a=t.ga.extend({l:function(a,c){t.ga.call(this,a,c);this.b(a,"timeupdate",this.ma)}});t.$a.prototype.defaultValue="00:00";t.$a.prototype.e=function(){return t.ga.prototype.e.call(this,"div",{className:"vjs-seek-handle","aria-live":"off"})};
-t.$a.prototype.ma=function(){var a=this.d.ob?this.d.K.currentTime:this.d.currentTime();this.c.innerHTML='<span class="vjs-control-text">'+t.Ma(a,this.d.duration())+"</span>"};t.Gb=t.a.extend({l:function(a,c){t.a.call(this,a,c);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")})}});t.Gb.prototype.q={children:{volumeBar:{}}};
-t.Gb.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-volume-control vjs-control"})};t.Fb=t.U.extend({l:function(a,c){t.U.call(this,a,c);this.b(a,"volumechange",this.Ca);a.I(t.bind(this,this.Ca))}});s=t.Fb.prototype;s.Ca=function(){this.c.setAttribute("aria-valuenow",t.round(100*this.d.volume(),2));this.c.setAttribute("aria-valuetext",t.round(100*this.d.volume(),2)+"%")};s.q={children:{volumeLevel:{},volumeHandle:{}},barName:"volumeLevel",handleName:"volumeHandle"};
-s.Yc="volumechange";s.e=function(){return t.U.prototype.e.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})};s.ka=function(a){this.d.muted()&&this.d.muted(l);this.d.volume(ea(this,a))};s.Sb=function(){return this.d.muted()?0:this.d.volume()};s.kd=function(){this.d.volume(this.d.volume()+0.1)};s.jd=function(){this.d.volume(this.d.volume()-0.1)};t.uc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
-t.uc.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})};t.Hb=t.ga.extend();t.Hb.prototype.defaultValue="00:00";t.Hb.prototype.e=function(){return t.ga.prototype.e.call(this,"div",{className:"vjs-volume-handle"})};
-t.qa=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.b(a,"volumechange",this.update);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")})}});t.qa.prototype.e=function(){return t.w.prototype.e.call(this,"div",{className:"vjs-mute-control vjs-control",innerHTML:'<div><span class="vjs-control-text">'+this.v("Mute")+"</span></div>"})};
-t.qa.prototype.u=function(){this.d.muted(this.d.muted()?l:f)};t.qa.prototype.update=function(){var a=this.d.volume(),c=3;0===a||this.d.muted()?c=0:0.33>a?c=1:0.67>a&&(c=2);this.d.muted()?this.c.children[0].children[0].innerHTML!=this.v("Unmute")&&(this.c.children[0].children[0].innerHTML=this.v("Unmute")):this.c.children[0].children[0].innerHTML!=this.v("Mute")&&(this.c.children[0].children[0].innerHTML=this.v("Mute"));for(a=0;4>a;a++)t.r(this.c,"vjs-vol-"+a);t.p(this.c,"vjs-vol-"+c)};
-t.Fa=t.O.extend({l:function(a,c){t.O.call(this,a,c);this.b(a,"volumechange",this.ef);a.h&&a.h.featuresVolumeControl===l&&this.p("vjs-hidden");this.b(a,"loadstart",function(){a.h.featuresVolumeControl===l?this.p("vjs-hidden"):this.r("vjs-hidden")});this.p("vjs-menu-button")}});t.Fa.prototype.Ja=function(){var a=new t.pa(this.d,{Cc:"div"}),c=new t.Fb(this.d,this.q.volumeBar);c.b("focus",function(){a.p("vjs-lock-showing")});c.b("blur",function(){G(a)});a.ba(c);return a};
-t.Fa.prototype.u=function(){t.qa.prototype.u.call(this);t.O.prototype.u.call(this)};t.Fa.prototype.e=function(){return t.w.prototype.e.call(this,"div",{className:"vjs-volume-menu-button vjs-menu-button vjs-control",innerHTML:'<div><span class="vjs-control-text">'+this.v("Mute")+"</span></div>"})};t.Fa.prototype.ef=t.qa.prototype.update;t.oc=t.O.extend({l:function(a,c){t.O.call(this,a,c);this.sd();this.rd();this.b(a,"loadstart",this.sd);this.b(a,"ratechange",this.rd)}});s=t.oc.prototype;s.sa="Playback Rate";
-s.className="vjs-playback-rate";s.e=function(){var a=t.O.prototype.e.call(this);this.Sc=t.e("div",{className:"vjs-playback-rate-value",innerHTML:1});a.appendChild(this.Sc);return a};s.Ja=function(){var a=new t.pa(this.k()),c=this.k().options().playbackRates;if(c)for(var d=c.length-1;0<=d;d--)a.ba(new t.Bb(this.k(),{rate:c[d]+"x"}));return a};s.Ca=function(){this.m().setAttribute("aria-valuenow",this.k().playbackRate())};
-s.u=function(){for(var a=this.k().playbackRate(),c=this.k().options().playbackRates,d=c[0],e=0;e<c.length;e++)if(c[e]>a){d=c[e];break}this.k().playbackRate(d)};function na(a){return a.k().h&&a.k().h.featuresPlaybackRate&&a.k().options().playbackRates&&0<a.k().options().playbackRates.length}s.sd=function(){na(this)?this.r("vjs-hidden"):this.p("vjs-hidden")};s.rd=function(){na(this)&&(this.Sc.innerHTML=this.k().playbackRate()+"x")};
-t.Bb=t.M.extend({Cc:"button",l:function(a,c){var d=this.label=c.rate,e=this.$c=parseFloat(d,10);c.label=d;c.selected=1===e;t.M.call(this,a,c);this.b(a,"ratechange",this.update)}});t.Bb.prototype.u=function(){t.M.prototype.u.call(this);this.k().playbackRate(this.$c)};t.Bb.prototype.update=function(){this.selected(this.k().playbackRate()==this.$c)};t.pc=t.w.extend({l:function(a,c){t.w.call(this,a,c);this.update();a.b("posterchange",t.bind(this,this.update))}});s=t.pc.prototype;
-s.dispose=function(){this.k().n("posterchange",this.update);t.w.prototype.dispose.call(this)};s.e=function(){var a=t.e("div",{className:"vjs-poster",tabIndex:-1});t.wd||(this.Ob=t.e("img"),a.appendChild(this.Ob));return a};s.update=function(){var a=this.k().poster();this.la(a);a?this.show():this.Y()};s.la=function(a){var c;this.Ob?this.Ob.src=a:(c="",a&&(c='url("'+a+'")'),this.c.style.backgroundImage=c)};s.u=function(){this.d.play()};t.lc=t.a.extend({l:function(a,c){t.a.call(this,a,c)}});
-t.lc.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-loading-spinner"})};t.sb=t.w.extend();t.sb.prototype.e=function(){return t.w.prototype.e.call(this,"div",{className:"vjs-big-play-button",innerHTML:'<span aria-hidden="true"></span>',"aria-label":"play video"})};t.sb.prototype.u=function(){this.d.play()};t.xb=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.update();this.b(a,"error",this.update)}});
-t.xb.prototype.e=function(){var a=t.a.prototype.e.call(this,"div",{className:"vjs-error-display"});this.B=t.e("div");a.appendChild(this.B);return a};t.xb.prototype.update=function(){this.k().error()&&(this.B.innerHTML=this.v(this.k().error().message))};var O;t.j=t.a.extend({l:function(a,c,d){c=c||{};c.dd=l;t.a.call(this,a,c,d);this.featuresProgressEvents||this.re();this.featuresTimeupdateEvents||this.se();this.fe();this.featuresNativeTextTracks||this.Vd();this.he()}});s=t.j.prototype;
-s.fe=function(){var a,c;a=this.k();c=function(){a.controls()&&!a.usingNativeControls()&&this.Id()};this.I(c);this.b(a,"controlsenabled",c);this.b(a,"controlsdisabled",this.He);this.I(function(){this.networkState&&0<this.networkState()&&this.k().o("loadstart")})};
-s.Id=function(){var a;this.b("mousedown",this.u);this.b("touchstart",function(){a=this.d.userActive()});this.b("touchmove",function(){a&&this.k().reportUserActivity()});this.b("touchend",function(a){a.preventDefault()});da(this);this.b("tap",this.Be)};s.He=function(){this.n("tap");this.n("touchstart");this.n("touchmove");this.n("touchleave");this.n("touchcancel");this.n("touchend");this.n("click");this.n("mousedown")};
-s.u=function(a){0===a.button&&this.k().controls()&&(this.k().paused()?this.k().play():this.k().pause())};s.Be=function(){this.k().userActive(!this.k().userActive())};s.re=function(){this.Uc=f;this.$e()};s.qe=function(){this.Uc=l;this.ld()};s.$e=function(){this.Ge=this.setInterval(function(){var a=this.k().bufferedPercent();this.Md!=a&&this.k().o("progress");this.Md=a;1===a&&this.ld()},500)};s.ld=function(){this.clearInterval(this.Ge)};
-s.se=function(){var a=this.d;this.Yb=f;this.b(a,"play",this.pd);this.b(a,"pause",this.rb);this.N("timeupdate",function(){this.featuresTimeupdateEvents=f;this.Vc()})};s.Vc=function(){var a=this.d;this.Yb=l;this.rb();this.n(a,"play",this.pd);this.n(a,"pause",this.rb)};s.pd=function(){this.Fc&&this.rb();this.Fc=this.setInterval(function(){this.k().o("timeupdate")},250)};s.rb=function(){this.clearInterval(this.Fc);this.k().o("timeupdate")};s.dispose=function(){this.Uc&&this.qe();this.Yb&&this.Vc();t.a.prototype.dispose.call(this)};
-s.bc=function(){this.Yb&&this.k().o("timeupdate")};s.he=function(){function a(){var a=c.ea("textTrackDisplay");a&&a.C()}var c=this.d,d;if(d=this.textTracks())d.addEventListener("removetrack",a),d.addEventListener("addtrack",a),this.b("dispose",t.bind(this,function(){d.removeEventListener("removetrack",a);d.removeEventListener("addtrack",a)}))};
-s.Vd=function(){var a=this.d,c,d,e;window.WebVTT||(e=document.createElement("script"),e.src=a.options()["vtt.js"]||"../node_modules/vtt.js/dist/vtt.js",a.m().appendChild(e),window.WebVTT=f);if(d=this.textTracks())c=function(){var c,d,e;e=a.ea("textTrackDisplay");e.C();for(c=0;c<this.length;c++)d=this[c],d.removeEventListener("cuechange",t.bind(e,e.C)),"showing"===d.mode&&d.addEventListener("cuechange",t.bind(e,e.C))},d.addEventListener("change",c),this.b("dispose",t.bind(this,function(){d.removeEventListener("change",
-c)}))};s.textTracks=function(){this.d.od=this.d.od||new t.F;return this.d.od};s.Z=function(){this.d.ad=this.d.ad||new t.F;return this.d.ad};O=function(a,c,d,e,g){var h=a.textTracks();g=g||{};g.kind=c;d&&(g.label=d);e&&(g.language=e);g.player=a.d;a=new t.t(g);P(h,a);return a};t.j.prototype.addTextTrack=function(a,c,d){if(!a)throw Error("TextTrack kind is required but was not provided");return O(this,a,c,d)};t.j.prototype.ha=function(a){a=O(this,a.kind,a.label,a.language,a);P(this.Z(),a);return{T:a}};
-t.j.prototype.Ba=function(a){Q(this.textTracks(),a);Q(this.Z(),a)};t.j.prototype.fd=m();t.j.prototype.featuresVolumeControl=f;t.j.prototype.featuresFullscreenResize=l;t.j.prototype.featuresPlaybackRate=l;t.j.prototype.featuresProgressEvents=l;t.j.prototype.featuresTimeupdateEvents=l;t.j.prototype.featuresNativeTextTracks=l;
-t.j.gc=function(a){a.Ra=function(c,d){var e=a.gd;e||(e=a.gd=[]);d===b&&(d=e.length);e.splice(d,0,c)};a.pb=function(c){for(var d=a.gd||[],e,g=0;g<d.length;g++)if(e=d[g].eb(c))return d[g];return j};a.zc=function(c){var d=a.pb(c);return d?d.eb(c):""};a.prototype.Sa=function(c){var d=a.pb(c);d||(a.S?d=a.S:t.log.error("No source hander found for the current source."));this.Ka();this.n("dispose",this.Ka);this.Ec=c;this.cc=d.Tb(c,this);this.b("dispose",this.Ka);return this};a.prototype.Ka=function(){this.cc&&
-this.cc.dispose&&this.cc.dispose()}};t.media={};
-t.f=t.j.extend({l:function(a,c,d){var e,g,h;if(c.nativeCaptions===l||c.nativeTextTracks===l)this.featuresNativeTextTracks=l;t.j.call(this,a,c,d);for(d=t.f.yb.length-1;0<=d;d--)this.b(t.f.yb[d],this.Wd);(c=c.source)&&(this.c.currentSrc!==c.src||a.L&&3===a.L.ge)&&this.Sa(c);if(this.c.hasChildNodes()){d=this.c.childNodes;e=d.length;for(c=[];e--;)g=d[e],h=g.nodeName.toLowerCase(),"track"===h&&(this.featuresNativeTextTracks?P(this.Z(),g.track):c.push(g));for(d=0;d<c.length;d++)this.c.removeChild(c[d])}this.featuresNativeTextTracks&&
-this.b("loadstart",t.bind(this,this.ee));if(t.Eb&&a.options().nativeControlsForTouch===f){var k,p,r,u;k=this;p=this.k();c=p.controls();k.c.controls=!!c;r=function(){k.c.controls=f};u=function(){k.c.controls=l};p.b("controlsenabled",r);p.b("controlsdisabled",u);c=function(){p.n("controlsenabled",r);p.n("controlsdisabled",u)};k.b("dispose",c);p.b("usingcustomcontrols",c);p.usingNativeControls(f)}a.I(function(){this.L&&(this.q.autoplay&&this.paused())&&(delete this.L.poster,this.play())});this.Wa()}});
-s=t.f.prototype;s.dispose=function(){t.f.Mb(this.c);t.j.prototype.dispose.call(this)};
-s.e=function(){var a=this.d,c,d,e,g=a.L;if(!g||this.movingMediaElementInDOM===l){g?(e=g.cloneNode(l),t.f.Mb(g),g=e,a.L=j):(g=t.e("video"),e=videojs.$.ya({},a.Xe),(!t.Eb||a.options().nativeControlsForTouch!==f)&&delete e.controls,t.ed(g,t.i.D(e,{id:a.id()+"_html5_api","class":"vjs-tech"})));g.player=a;if(a.q.qd)for(e=0;e<a.q.qd.length;e++)c=a.q.qd[e],d=document.createElement("track"),d.Wb=c.Wb,d.label=c.label,d.hd=c.hd,d.src=c.src,"default"in c&&d.setAttribute("default","default"),g.appendChild(d);
-t.Ub(g,a.m())}c=["autoplay","preload","loop","muted"];for(e=c.length-1;0<=e;e--){d=c[e];var h={};"undefined"!==typeof a.q[d]&&(h[d]=a.q[d]);t.ed(g,h)}return g};s.ee=function(){for(var a=this.c.querySelectorAll("track"),c,d=a.length,e={captions:1,subtitles:1};d--;)if((c=a[d].T)&&c.kind in e&&!a[d]["default"])c.mode="disabled"};s.Wd=function(a){"error"==a.type&&this.error()?this.k().error(this.error().code):(a.bubbles=l,this.k().o(a))};s.play=function(){this.c.play()};s.pause=function(){this.c.pause()};
-s.paused=function(){return this.c.paused};s.currentTime=function(){return this.c.currentTime};s.bc=function(a){try{this.c.currentTime=a}catch(c){t.log(c,"Video is not ready. (Video.js)")}};s.duration=function(){return this.c.duration||0};s.buffered=function(){return this.c.buffered};s.volume=function(){return this.c.volume};s.Se=function(a){this.c.volume=a};s.muted=function(){return this.c.muted};s.Oe=function(a){this.c.muted=a};s.width=function(){return this.c.offsetWidth};s.height=function(){return this.c.offsetHeight};
-s.Ta=function(){return"function"==typeof this.c.webkitEnterFullScreen&&(/Android/.test(t.P)||!/Chrome|Mac OS X 10.5/.test(t.P))?f:l};s.Ic=function(){var a=this.c;"webkitDisplayingFullscreen"in a&&this.N("webkitbeginfullscreen",function(){this.d.isFullscreen(f);this.N("webkitendfullscreen",function(){this.d.isFullscreen(l);this.d.o("fullscreenchange")});this.d.o("fullscreenchange")});a.paused&&a.networkState<=a.jf?(this.c.play(),this.setTimeout(function(){a.pause();a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()};
-s.Xd=function(){this.c.webkitExitFullScreen()};s.src=function(a){if(a===b)return this.c.src;this.la(a)};s.la=function(a){this.c.src=a};s.load=function(){this.c.load()};s.currentSrc=function(){return this.c.currentSrc};s.poster=function(){return this.c.poster};s.fd=function(a){this.c.poster=a};s.Qa=function(){return this.c.Qa};s.Qe=function(a){this.c.Qa=a};s.autoplay=function(){return this.c.autoplay};s.Le=function(a){this.c.autoplay=a};s.controls=function(){return this.c.controls};s.loop=function(){return this.c.loop};
-s.Ne=function(a){this.c.loop=a};s.error=function(){return this.c.error};s.seeking=function(){return this.c.seeking};s.ended=function(){return this.c.ended};s.playbackRate=function(){return this.c.playbackRate};s.Pe=function(a){this.c.playbackRate=a};s.networkState=function(){return this.c.networkState};s.readyState=function(){return this.c.readyState};s.textTracks=function(){return!this.featuresNativeTextTracks?t.j.prototype.textTracks.call(this):this.c.textTracks};
-s.addTextTrack=function(a,c,d){return!this.featuresNativeTextTracks?t.j.prototype.addTextTrack.call(this,a,c,d):this.c.addTextTrack(a,c,d)};
-s.ha=function(a){if(!this.featuresNativeTextTracks)return t.j.prototype.ha.call(this,a);var c=document.createElement("track");a=a||{};a.kind&&(c.kind=a.kind);a.label&&(c.label=a.label);if(a.language||a.srclang)c.srclang=a.language||a.srclang;a["default"]&&(c["default"]=a["default"]);a.id&&(c.id=a.id);a.src&&(c.src=a.src);this.m().appendChild(c);c.track.mode="metadata"===c.T.kind?"hidden":"disabled";c.onload=function(){var a=c.track;2<=c.readyState&&("metadata"===a.kind&&"hidden"!==a.mode?a.mode="hidden":
-"metadata"!==a.kind&&"disabled"!==a.mode&&(a.mode="disabled"),c.onload=j)};P(this.Z(),c.T);return c};s.Ba=function(a){if(!this.featuresNativeTextTracks)return t.j.prototype.Ba.call(this,a);var c,d;Q(this.Z(),a);c=this.m().querySelectorAll("track");for(d=0;d<c.length;d++)if(c[d]===a||c[d].track===a){c[d].parentNode.removeChild(c[d]);break}};t.f.isSupported=function(){try{t.A.volume=0.5}catch(a){return l}return!!t.A.canPlayType};t.j.gc(t.f);t.f.S={};
-t.f.S.eb=function(a){function c(a){try{return t.A.canPlayType(a)}catch(c){return""}}return a.type?c(a.type):a.src?(a=(a=a.src.match(/\.([^.\/\?]+)(\?[^\/]+)?$/i))&&a[1],c("video/"+a)):""};t.f.S.Tb=function(a,c){c.la(a.src)};t.f.S.dispose=m();t.f.Ra(t.f.S);t.f.Od=function(){var a=t.A.volume;t.A.volume=a/2+0.1;return a!==t.A.volume};t.f.Nd=function(){var a=t.A.playbackRate;t.A.playbackRate=a/2+0.1;return a!==t.A.playbackRate};
-t.f.Ve=function(){var a;(a=!!t.A.textTracks)&&0<t.A.textTracks.length&&(a="number"!==typeof t.A.textTracks[0].mode);a&&t.jc&&(a=l);return a};t.f.prototype.featuresVolumeControl=t.f.Od();t.f.prototype.featuresPlaybackRate=t.f.Nd();t.f.prototype.movingMediaElementInDOM=!t.Ad;t.f.prototype.featuresFullscreenResize=f;t.f.prototype.featuresProgressEvents=f;t.f.prototype.featuresNativeTextTracks=t.f.Ve();var S,oa=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,pa=/^video\/mp4/i;
-t.f.Xc=function(){4<=t.hc&&(S||(S=t.A.constructor.prototype.canPlayType),t.A.constructor.prototype.canPlayType=function(a){return a&&oa.test(a)?"maybe":S.call(this,a)});t.Ed&&(S||(S=t.A.constructor.prototype.canPlayType),t.A.constructor.prototype.canPlayType=function(a){return a&&pa.test(a)?"maybe":S.call(this,a)})};t.f.bf=function(){var a=t.A.constructor.prototype.canPlayType;t.A.constructor.prototype.canPlayType=S;S=j;return a};t.f.Xc();t.f.yb="loadstart suspend abort error emptied stalled loadedmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate progress play pause ratechange volumechange".split(" ");
-t.f.Mb=function(a){if(a){a.player=j;for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src");if("function"===typeof a.load)try{a.load()}catch(c){}}};
-t.g=t.j.extend({l:function(a,c,d){t.j.call(this,a,c,d);var e=c.source;d=c.parentEl;var g=this.c=t.e("div",{id:a.id()+"_temp_flash"}),h=a.id()+"_flash_api",k=a.q,k=t.i.D({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:k.autoplay,preload:k.Qa,loop:k.loop,muted:k.muted},c.flashVars),p=t.i.D({wmode:"opaque",bgcolor:"#000000"},c.params),h=t.i.D({id:h,name:h,"class":"vjs-tech"},c.attributes);e&&this.I(function(){this.Sa(e)});
-t.Ub(g,d);c.startTime&&this.I(function(){this.load();this.play();this.currentTime(c.startTime)});t.jc&&this.I(function(){this.b("mousemove",function(){this.k().o({type:"mousemove",bubbles:l})})});a.b("stageclick",a.reportUserActivity);this.c=t.g.Hc(c.swf,g,k,p,h)}});s=t.g.prototype;s.dispose=function(){t.j.prototype.dispose.call(this)};s.play=function(){this.c.vjs_play()};s.pause=function(){this.c.vjs_pause()};s.src=function(a){return a===b?this.currentSrc():this.la(a)};
-s.la=function(a){a=t.$d(a);this.c.vjs_src(a);if(this.d.autoplay()){var c=this;this.setTimeout(function(){c.play()},0)}};t.g.prototype.setCurrentTime=function(a){this.oe=a;this.c.vjs_setProperty("currentTime",a);t.j.prototype.bc.call(this)};t.g.prototype.currentTime=function(){return this.seeking()?this.oe||0:this.c.vjs_getProperty("currentTime")};t.g.prototype.currentSrc=function(){return this.Ec?this.Ec.src:this.c.vjs_getProperty("currentSrc")};t.g.prototype.load=function(){this.c.vjs_load()};
-t.g.prototype.poster=function(){this.c.vjs_getProperty("poster")};t.g.prototype.setPoster=m();t.g.prototype.buffered=function(){return t.Lb(0,this.c.vjs_getProperty("buffered"))};t.g.prototype.Ta=q(l);t.g.prototype.Ic=q(l);function qa(){var a=T[U],c=a.charAt(0).toUpperCase()+a.slice(1);ra["set"+c]=function(c){return this.c.vjs_setProperty(a,c)}}function sa(a){ra[a]=function(){return this.c.vjs_getProperty(a)}}
-var ra=t.g.prototype,T="rtmpConnection rtmpStream preload defaultPlaybackRate playbackRate autoplay loop mediaGroup controller controls volume muted defaultMuted".split(" "),ta="error networkState readyState seeking initialTime duration startOffsetTime paused played seekable ended videoTracks audioTracks videoWidth videoHeight".split(" "),U;for(U=0;U<T.length;U++)sa(T[U]),qa();for(U=0;U<ta.length;U++)sa(ta[U]);t.g.isSupported=function(){return 10<=t.g.version()[0]};t.j.gc(t.g);t.g.S={};
-t.g.S.eb=function(a){return!a.type?"":a.type.replace(/;.*/,"").toLowerCase()in t.g.Zd?"maybe":""};t.g.S.Tb=function(a,c){c.la(a.src)};t.g.S.dispose=m();t.g.Ra(t.g.S);t.g.Zd={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"};t.g.onReady=function(a){var c;if(c=(a=t.m(a))&&a.parentNode&&a.parentNode.player)a.player=c,t.g.checkReady(c.h)};t.g.checkReady=function(a){a.m()&&(a.m().vjs_getProperty?a.Wa():this.setTimeout(function(){t.g.checkReady(a)},50))};
-t.g.onEvent=function(a,c){t.m(a).player.o(c)};t.g.onError=function(a,c){var d=t.m(a).player,e="FLASH: "+c;"srcnotfound"==c?d.error({code:4,message:e}):d.error(e)};
-t.g.version=function(){var a="0,0,0";try{a=(new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(c){try{navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(d){}}return a.split(",")};
-t.g.Hc=function(a,c,d,e,g){a=t.g.ce(a,d,e,g);a=t.e("div",{innerHTML:a}).childNodes[0];d=c.parentNode;c.parentNode.replaceChild(a,c);var h=d.childNodes[0];setTimeout(function(){h.style.display="block"},1E3);return a};
-t.g.ce=function(a,c,d,e){var g="",h="",k="";c&&t.i.da(c,function(a,c){g+=a+"="+c+"&amp;"});d=t.i.D({movie:a,flashvars:g,allowScriptAccess:"always",allowNetworking:"all"},d);t.i.da(d,function(a,c){h+='<param name="'+a+'" value="'+c+'" />'});e=t.i.D({data:a,width:"100%",height:"100%"},e);t.i.da(e,function(a,c){k+=a+'="'+c+'" '});return'<object type="application/x-shockwave-flash" '+k+">"+h+"</object>"};t.g.Ue={"rtmp/mp4":"MP4","rtmp/flv":"FLV"};t.g.Hf=function(a,c){return a+"&"+c};
-t.g.Te=function(a){var c={Bc:"",md:""};if(!a)return c;var d=a.indexOf("&"),e;-1!==d?e=d+1:(d=e=a.lastIndexOf("/")+1,0===d&&(d=e=a.length));c.Bc=a.substring(0,d);c.md=a.substring(e,a.length);return c};t.g.me=function(a){return a in t.g.Ue};t.g.Gd=/^rtmp[set]?:\/\//i;t.g.le=function(a){return t.g.Gd.test(a)};t.g.ac={};t.g.ac.eb=function(a){return t.g.me(a.type)||t.g.le(a.src)?"maybe":""};t.g.ac.Tb=function(a,c){var d=t.g.Te(a.src);c.setRtmpConnection(d.Bc);c.setRtmpStream(d.md)};t.g.Ra(t.g.ac);
-t.Fd=t.a.extend({l:function(a,c,d){t.a.call(this,a,c,d);if(!a.q.sources||0===a.q.sources.length){c=0;for(d=a.q.techOrder;c<d.length;c++){var e=t.ua(d[c]),g=window.videojs[e];if(g&&g.isSupported()){ka(a,e);break}}}else a.src(a.q.sources)}});t.rc={disabled:"disabled",hidden:"hidden",showing:"showing"};t.Hd={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"};
-t.t=function(a){var c,d,e,g,h,k,p,r,u,A,R;a=a||{};if(!a.player)throw Error("A player was not provided.");c=this;if(t.oa)for(R in c=document.createElement("custom"),t.t.prototype)c[R]=t.t.prototype[R];c.d=a.player;e=t.rc[a.mode]||"disabled";g=t.Hd[a.kind]||"subtitles";h=a.label||"";k=a.language||a.srclang||"";d=a.id||"vjs_text_track_"+t.s++;if("metadata"===g||"chapters"===g)e="hidden";c.X=[];c.Ga=[];p=new t.W(c.X);r=new t.W(c.Ga);A=l;u=t.bind(c,function(){this.activeCues;A&&(this.trigger("cuechange"),
-A=l)});"disabled"!==e&&c.d.b("timeupdate",u);Object.defineProperty(c,"kind",{get:function(){return g},set:Function.prototype});Object.defineProperty(c,"label",{get:function(){return h},set:Function.prototype});Object.defineProperty(c,"language",{get:function(){return k},set:Function.prototype});Object.defineProperty(c,"id",{get:function(){return d},set:Function.prototype});Object.defineProperty(c,"mode",{get:function(){return e},set:function(a){t.rc[a]&&(e=a,"showing"===e&&this.d.b("timeupdate",u),
-this.o("modechange"))}});Object.defineProperty(c,"cues",{get:function(){return!this.Xb?j:p},set:Function.prototype});Object.defineProperty(c,"activeCues",{get:function(){var a,c,d,e,g;if(!this.Xb)return j;if(0===this.cues.length)return r;e=this.d.currentTime();a=0;c=this.cues.length;for(d=[];a<c;a++)g=this.cues[a],g.startTime<=e&&g.endTime>=e?d.push(g):g.startTime===g.endTime&&(g.startTime<=e&&g.startTime+0.5>=e)&&d.push(g);A=l;if(d.length!==this.Ga.length)A=f;else for(a=0;a<d.length;a++)-1===ua.call(this.Ga,
-d[a])&&(A=f);this.Ga=d;r.qb(this.Ga);return r},set:Function.prototype});a.src?va(a.src,c):c.Xb=f;if(t.oa)return c};t.t.prototype=t.i.create(t.z.prototype);t.t.prototype.constructor=t.t;t.t.prototype.bb={cuechange:"cuechange"};t.t.prototype.vc=function(a){var c=this.d.textTracks(),d=0;if(c)for(;d<c.length;d++)c[d]!==this&&c[d].bd(a);this.X.push(a);this.cues.qb(this.X)};t.t.prototype.bd=function(a){for(var c=0,d=this.X.length,e,g=l;c<d;c++)e=this.X[c],e===a&&(this.X.splice(c,1),g=f);g&&this.Dc.qb(this.X)};
-var va,V,ua;va=function(a,c){t.ff(a,t.bind(this,function(a,e,g){if(a)return t.log.error(a);c.Xb=f;V(g,c)}))};V=function(a,c){if("function"!==typeof window.WebVTT)window.setTimeout(function(){V(a,c)},25);else{var d=new window.WebVTT.Parser(window,window.vttjs,window.WebVTT.StringDecoder());d.oncue=function(a){c.vc(a)};d.onparsingerror=function(a){t.log.error(a)};d.parse(a);d.flush()}};
-ua=function(a,c){var d;if(this==j)throw new TypeError('"this" is null or not defined');var e=Object(this),g=e.length>>>0;if(0===g)return-1;d=+c||0;Infinity===Math.abs(d)&&(d=0);if(d>=g)return-1;for(d=Math.max(0<=d?d:g-Math.abs(d),0);d<g;){if(d in e&&e[d]===a)return d;d++}return-1};
-t.F=function(a){var c=this,d,e=0;if(t.oa)for(d in c=document.createElement("custom"),t.F.prototype)c[d]=t.F.prototype[d];a=a||[];c.Va=[];for(Object.defineProperty(c,"length",{get:function(){return this.Va.length}});e<a.length;e++)P(c,a[e]);if(t.oa)return c};t.F.prototype=t.i.create(t.z.prototype);t.F.prototype.constructor=t.F;t.F.prototype.bb={change:"change",addtrack:"addtrack",removetrack:"removetrack"};for(var wa in t.F.prototype.bb)t.F.prototype["on"+wa]=j;
-function P(a,c){var d=a.Va.length;""+d in a||Object.defineProperty(a,d,{get:function(){return this.Va[d]}});c.addEventListener("modechange",t.bind(a,function(){this.o("change")}));a.Va.push(c);a.o({type:"addtrack",T:c})}function Q(a,c){for(var d=0,e=a.length,g;d<e;d++)if(g=a[d],g===c){a.Va.splice(d,1);break}a.o({type:"removetrack",T:c})}t.F.prototype.de=function(a){for(var c=0,d=this.length,e=j,g;c<d;c++)if(g=this[c],g.id===a){e=g;break}return e};
-t.W=function(a){var c=this,d;if(t.oa)for(d in c=document.createElement("custom"),t.W.prototype)c[d]=t.W.prototype[d];t.W.prototype.qb.call(c,a);Object.defineProperty(c,"length",{get:n("pe")});if(t.oa)return c};t.W.prototype.qb=function(a){var c=this.length||0,d=0,e=a.length;this.X=a;this.pe=a.length;a=function(a){""+a in this||Object.defineProperty(this,""+a,{get:function(){return this.X[a]}})};if(c<e)for(d=c;d<e;d++)a.call(this,d)};
-t.W.prototype.be=function(a){for(var c=0,d=this.length,e=j,g;c<d;c++)if(g=this[c],g.id===a){e=g;break}return e};t.ra=t.a.extend({l:function(a,c,d){t.a.call(this,a,c,d);a.b("loadstart",t.bind(this,this.Ze));a.I(t.bind(this,function(){if(a.h&&a.h.featuresNativeTextTracks)this.Y();else{var c,d,h;a.b("fullscreenchange",t.bind(this,this.C));d=a.q.tracks||[];for(c=0;c<d.length;c++)h=d[c],this.d.ha(h)}}))}});t.ra.prototype.Ze=function(){this.d.h&&this.d.h.featuresNativeTextTracks?this.Y():this.show()};
-t.ra.prototype.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-text-track-display"})};t.ra.prototype.Pd=function(){"function"===typeof window.WebVTT&&window.WebVTT.processCues(window,[],this.c)};function W(a,c){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+c+")"}
-var xa={xf:"monospace",Df:"sans-serif",Ff:"serif",yf:'"Andale Mono", "Lucida Console", monospace',zf:'"Courier New", monospace',Bf:"sans-serif",Cf:"serif",of:'"Comic Sans MS", Impact, fantasy',Ef:'"Monotype Corsiva", cursive',Gf:'"Andale Mono", "Lucida Console", monospace, sans-serif'};t.ra.prototype.C=function(){var a=this.d.textTracks(),c=0,d;this.Pd();if(a)for(;c<a.length;c++)d=a[c],"showing"===d.mode&&this.cf(d)};
-t.ra.prototype.cf=function(a){if("function"===typeof window.WebVTT&&a.activeCues){for(var c=0,d=this.d.textTrackSettings.Lc(),e,g=[];c<a.activeCues.length;c++)g.push(a.activeCues[c]);window.WebVTT.processCues(window,a.activeCues,this.c);for(c=g.length;c--;){a=g[c].pf;d.color&&(a.firstChild.style.color=d.color);if(d.nd)try{a.firstChild.style.color=W(d.color||"#fff",d.nd)}catch(h){}d.backgroundColor&&(a.firstChild.style.backgroundColor=d.backgroundColor);if(d.yc)try{a.firstChild.style.backgroundColor=
-W(d.backgroundColor||"#000",d.yc)}catch(k){}if(d.fc)if(d.ud)try{a.style.backgroundColor=W(d.fc,d.ud)}catch(p){}else a.style.backgroundColor=d.fc;d.La&&("dropshadow"===d.La?a.firstChild.style.textShadow="2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px #222":"raised"===d.La?a.firstChild.style.textShadow="1px 1px #222, 2px 2px #222, 3px 3px #222":"depressed"===d.La?a.firstChild.style.textShadow="1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px #222":"uniform"===d.La&&(a.firstChild.style.textShadow="0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px #222"));
-d.Qb&&1!==d.Qb&&(e=window.Af(a.style.fontSize),a.style.fontSize=e*d.Qb+"px",a.style.height="auto",a.style.top="auto",a.style.bottom="2px");d.fontFamily&&"default"!==d.fontFamily&&("small-caps"===d.fontFamily?a.firstChild.style.fontVariant="small-caps":a.firstChild.style.fontFamily=xa[d.fontFamily])}}};
-t.aa=t.M.extend({l:function(a,c){var d=this.T=c.track,e=a.textTracks(),g,h;e&&(g=t.bind(this,function(){var a="showing"===this.T.mode,c,d,g;if(this instanceof t.Ab){a=f;d=0;for(g=e.length;d<g;d++)if(c=e[d],c.kind===this.T.kind&&"showing"===c.mode){a=l;break}}this.selected(a)}),e.addEventListener("change",g),a.b("dispose",function(){e.removeEventListener("change",g)}));c.label=d.label||d.language||"Unknown";c.selected=d["default"]||"showing"===d.mode;t.M.call(this,a,c);e&&e.onchange===b&&this.b(["tap",
-"click"],function(){if("object"!==typeof window.yd)try{h=new window.yd("change")}catch(a){}h||(h=document.createEvent("Event"),h.initEvent("change",f,f));e.dispatchEvent(h)})}});t.aa.prototype.u=function(){var a=this.T.kind,c=this.d.textTracks(),d,e=0;t.M.prototype.u.call(this);if(c)for(;e<c.length;e++)d=c[e],d.kind===a&&(d.mode=d===this.T?"showing":"disabled")};t.Ab=t.aa.extend({l:function(a,c){c.track={kind:c.kind,player:a,label:c.kind+" off","default":l,mode:"disabled"};t.aa.call(this,a,c);this.selected(f)}});
-t.tb=t.aa.extend({l:function(a,c){c.track={kind:c.kind,player:a,label:c.kind+" settings","default":l,mode:"disabled"};t.aa.call(this,a,c);this.p("vjs-texttrack-settings")}});t.tb.prototype.u=function(){this.k().ea("textTrackSettings").show()};
-t.Q=t.O.extend({l:function(a,c){var d,e;t.O.call(this,a,c);d=this.d.textTracks();1>=this.H.length&&this.Y();d&&(e=t.bind(this,this.update),d.addEventListener("removetrack",e),d.addEventListener("addtrack",e),this.d.b("dispose",function(){d.removeEventListener("removetrack",e);d.removeEventListener("addtrack",e)}))}});
-t.Q.prototype.Ia=function(){var a=[],c,d;this instanceof t.na&&(!this.k().h||!this.k().h.featuresNativeTextTracks)&&a.push(new t.tb(this.d,{kind:this.fa}));a.push(new t.Ab(this.d,{kind:this.fa}));d=this.d.textTracks();if(!d)return a;for(var e=0;e<d.length;e++)c=d[e],c.kind===this.fa&&a.push(new t.aa(this.d,{track:c}));return a};t.na=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Captions Menu")}});t.na.prototype.fa="captions";t.na.prototype.sa="Captions";
-t.na.prototype.className="vjs-captions-button";t.na.prototype.update=function(){var a=2;t.Q.prototype.update.call(this);this.k().h&&this.k().h.featuresNativeTextTracks&&(a=1);this.H&&this.H.length>a?this.show():this.Y()};t.ab=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Subtitles Menu")}});t.ab.prototype.fa="subtitles";t.ab.prototype.sa="Subtitles";t.ab.prototype.className="vjs-subtitles-button";
-t.Xa=t.Q.extend({l:function(a,c,d){t.Q.call(this,a,c,d);this.c.setAttribute("aria-label","Chapters Menu")}});s=t.Xa.prototype;s.fa="chapters";s.sa="Chapters";s.className="vjs-chapters-button";s.Ia=function(){var a=[],c,d;d=this.d.textTracks();if(!d)return a;for(var e=0;e<d.length;e++)c=d[e],c.kind===this.fa&&a.push(new t.aa(this.d,{track:c}));return a};
-s.Ja=function(){for(var a=this.d.textTracks()||[],c=0,d=a.length,e,g,h=this.H=[];c<d;c++)if(e=a[c],e.kind==this.fa)if(e.Dc){g=e;break}else e.mode="hidden",window.setTimeout(t.bind(this,function(){this.Ja()}),100);a=this.xa;a===b&&(a=new t.pa(this.d),a.va().appendChild(t.e("li",{className:"vjs-menu-title",innerHTML:t.ua(this.fa),We:-1})));if(g){e=g.cues;for(var k,c=0,d=e.length;c<d;c++)k=e[c],k=new t.Ya(this.d,{track:g,cue:k}),h.push(k),a.ba(k);this.ba(a)}0<this.H.length&&this.show();return a};
-t.Ya=t.M.extend({l:function(a,c){var d=this.T=c.track,e=this.cue=c.cue,g=a.currentTime();c.label=e.text;c.selected=e.startTime<=g&&g<e.endTime;t.M.call(this,a,c);d.addEventListener("cuechange",t.bind(this,this.update))}});t.Ya.prototype.u=function(){t.M.prototype.u.call(this);this.d.currentTime(this.cue.startTime);this.update(this.cue.startTime)};t.Ya.prototype.update=function(){var a=this.cue,c=this.d.currentTime();this.selected(a.startTime<=c&&c<a.endTime)};
-function X(a){var c;a.Ke?c=a.Ke[0]:a.options&&(c=a.options[a.options.selectedIndex]);return c.value}function Y(a,c){var d,e;if(c){for(d=0;d<a.options.length&&!(e=a.options[d],e.value===c);d++);a.selectedIndex=d}}
-t.sc=t.a.extend({l:function(a,c){t.a.call(this,a,c);this.Y();t.b(this.m().querySelector(".vjs-done-button"),"click",t.bind(this,function(){this.Je();this.Y()}));t.b(this.m().querySelector(".vjs-default-button"),"click",t.bind(this,function(){this.m().querySelector(".vjs-fg-color > select").selectedIndex=0;this.m().querySelector(".vjs-bg-color > select").selectedIndex=0;this.m().querySelector(".window-color > select").selectedIndex=0;this.m().querySelector(".vjs-text-opacity > select").selectedIndex=
-0;this.m().querySelector(".vjs-bg-opacity > select").selectedIndex=0;this.m().querySelector(".vjs-window-opacity > select").selectedIndex=0;this.m().querySelector(".vjs-edge-style select").selectedIndex=0;this.m().querySelector(".vjs-font-family select").selectedIndex=0;this.m().querySelector(".vjs-font-percent select").selectedIndex=2;this.C()}));t.b(this.m().querySelector(".vjs-fg-color > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-bg-color > select"),"change",t.bind(this,
-this.C));t.b(this.m().querySelector(".window-color > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-text-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-bg-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-window-opacity > select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-font-percent select"),"change",t.bind(this,this.C));t.b(this.m().querySelector(".vjs-edge-style select"),"change",t.bind(this,
-this.C));t.b(this.m().querySelector(".vjs-font-family select"),"change",t.bind(this,this.C));a.options().persistTextTrackSettings&&this.Ie()}});s=t.sc.prototype;s.e=function(){return t.a.prototype.e.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:'<div class="vjs-tracksettings"><div class="vjs-tracksettings-colors"><div class="vjs-fg-color vjs-tracksetting"><label class="vjs-label">Foreground</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-text-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Opaque</option></select></span></div><div class="vjs-bg-color vjs-tracksetting"><label class="vjs-label">Background</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-bg-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Transparent</option><option value="0">Transparent</option></select></span></div><div class="window-color vjs-tracksetting"><label class="vjs-label">Window</label><select><option value="">---</option><option value="#FFF">White</option><option value="#000">Black</option><option value="#F00">Red</option><option value="#0F0">Green</option><option value="#00F">Blue</option><option value="#FF0">Yellow</option><option value="#F0F">Magenta</option><option value="#0FF">Cyan</option></select><span class="vjs-window-opacity vjs-opacity"><select><option value="">---</option><option value="1">Opaque</option><option value="0.5">Semi-Transparent</option><option value="0">Transparent</option></select></span></div></div><div class="vjs-tracksettings-font"><div class="vjs-font-percent vjs-tracksetting"><label class="vjs-label">Font Size</label><select><option value="0.50">50%</option><option value="0.75">75%</option><option value="1.00" selected>100%</option><option value="1.25">125%</option><option value="1.50">150%</option><option value="1.75">175%</option><option value="2.00">200%</option><option value="3.00">300%</option><option value="4.00">400%</option></select></div><div class="vjs-edge-style vjs-tracksetting"><label class="vjs-label">Text Edge Style</label><select><option value="none">None</option><option value="raised">Raised</option><option value="depressed">Depressed</option><option value="uniform">Uniform</option><option value="dropshadow">Dropshadow</option></select></div><div class="vjs-font-family vjs-tracksetting"><label class="vjs-label">Font Family</label><select><option value="">Default</option><option value="monospaceSerif">Monospace Serif</option><option value="proportionalSerif">Proportional Serif</option><option value="monospaceSansSerif">Monospace Sans-Serif</option><option value="proportionalSansSerif">Proportional Sans-Serif</option><option value="casual">Casual</option><option value="script">Script</option><option value="small-caps">Small Caps</option></select></div></div></div><div class="vjs-tracksettings-controls"><button class="vjs-default-button">Defaults</button><button class="vjs-done-button">Done</button></div>'})};
-s.Lc=function(){var a,c,d,e,g,h,k,p,r,u;a=this.m();g=X(a.querySelector(".vjs-edge-style select"));h=X(a.querySelector(".vjs-font-family select"));k=X(a.querySelector(".vjs-fg-color > select"));d=X(a.querySelector(".vjs-text-opacity > select"));p=X(a.querySelector(".vjs-bg-color > select"));c=X(a.querySelector(".vjs-bg-opacity > select"));r=X(a.querySelector(".window-color > select"));e=X(a.querySelector(".vjs-window-opacity > select"));a=window.parseFloat(X(a.querySelector(".vjs-font-percent > select")));
-c={backgroundOpacity:c,textOpacity:d,windowOpacity:e,edgeStyle:g,fontFamily:h,color:k,backgroundColor:p,windowColor:r,fontPercent:a};for(u in c)(""===c[u]||"none"===c[u]||"fontPercent"===u&&1===c[u])&&delete c[u];return c};
-s.Re=function(a){var c=this.m();Y(c.querySelector(".vjs-edge-style select"),a.La);Y(c.querySelector(".vjs-font-family select"),a.fontFamily);Y(c.querySelector(".vjs-fg-color > select"),a.color);Y(c.querySelector(".vjs-text-opacity > select"),a.nd);Y(c.querySelector(".vjs-bg-color > select"),a.backgroundColor);Y(c.querySelector(".vjs-bg-opacity > select"),a.yc);Y(c.querySelector(".window-color > select"),a.fc);Y(c.querySelector(".vjs-window-opacity > select"),a.ud);(a=a.Qb)&&(a=a.toFixed(2));Y(c.querySelector(".vjs-font-percent > select"),
-a)};s.Ie=function(){var a;try{a=JSON.parse(window.localStorage.getItem("vjs-text-track-settings"))}catch(c){}a&&this.Re(a)};s.Je=function(){var a;if(this.d.options().persistTextTrackSettings){a=this.Lc();try{t.ib(a)?window.localStorage.removeItem("vjs-text-track-settings"):window.localStorage.setItem("vjs-text-track-settings",JSON.stringify(a))}catch(c){}}};s.C=function(){var a=this.d.ea("textTrackDisplay");a&&a.C()};
-if("undefined"!==typeof window.JSON&&"function"===typeof window.JSON.parse)t.JSON=window.JSON;else{t.JSON={};var Z=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;t.JSON.parse=function(a,c){function d(a,e){var k,p,r=a[e];if(r&&"object"===typeof r)for(k in r)Object.prototype.hasOwnProperty.call(r,k)&&(p=d(r,k),p!==b?r[k]=p:delete r[k]);return c.call(a,e,r)}var e;a=String(a);Z.lastIndex=0;Z.test(a)&&(a=a.replace(Z,function(a){return"\\u"+("0000"+
-a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof c?d({"":e},""):e;throw new SyntaxError("JSON.parse(): invalid or malformed JSON data");}}
-t.xc=function(){var a,c,d,e;a=document.getElementsByTagName("video");c=document.getElementsByTagName("audio");var g=[];if(a&&0<a.length){d=0;for(e=a.length;d<e;d++)g.push(a[d])}if(c&&0<c.length){d=0;for(e=c.length;d<e;d++)g.push(c[d])}if(g&&0<g.length){d=0;for(e=g.length;d<e;d++)if((c=g[d])&&c.getAttribute)c.player===b&&(a=c.getAttribute("data-setup"),a!==j&&videojs(c));else{t.Ib();break}}else t.td||t.Ib()};t.Ib=function(){setTimeout(t.xc,1)};
-"complete"===document.readyState?t.td=f:t.N(window,"load",function(){t.td=f});t.Ib();t.Fe=function(a,c){t.Player.prototype[a]=c};var ya=this;function $(a,c){var d=a.split("."),e=ya;!(d[0]in e)&&e.execScript&&e.execScript("var "+d[0]);for(var g;d.length&&(g=d.shift());)!d.length&&c!==b?e[g]=c:e=e[g]?e[g]:e[g]={}};$("videojs",t);$("_V_",t);$("videojs.options",t.options);$("videojs.players",t.Aa);$("videojs.TOUCH_ENABLED",t.Eb);$("videojs.cache",t.ta);$("videojs.Component",t.a);t.a.prototype.player=t.a.prototype.k;t.a.prototype.options=t.a.prototype.options;t.a.prototype.init=t.a.prototype.l;t.a.prototype.dispose=t.a.prototype.dispose;t.a.prototype.createEl=t.a.prototype.e;t.a.prototype.contentEl=t.a.prototype.va;t.a.prototype.el=t.a.prototype.m;t.a.prototype.addChild=t.a.prototype.ba;
-t.a.prototype.getChild=t.a.prototype.ea;t.a.prototype.getChildById=t.a.prototype.ae;t.a.prototype.children=t.a.prototype.children;t.a.prototype.initChildren=t.a.prototype.Oc;t.a.prototype.removeChild=t.a.prototype.removeChild;t.a.prototype.on=t.a.prototype.b;t.a.prototype.off=t.a.prototype.n;t.a.prototype.one=t.a.prototype.N;t.a.prototype.trigger=t.a.prototype.o;t.a.prototype.triggerReady=t.a.prototype.Wa;t.a.prototype.show=t.a.prototype.show;t.a.prototype.hide=t.a.prototype.Y;
-t.a.prototype.width=t.a.prototype.width;t.a.prototype.height=t.a.prototype.height;t.a.prototype.dimensions=t.a.prototype.Td;t.a.prototype.ready=t.a.prototype.I;t.a.prototype.addClass=t.a.prototype.p;t.a.prototype.removeClass=t.a.prototype.r;t.a.prototype.hasClass=t.a.prototype.Oa;t.a.prototype.buildCSSClass=t.a.prototype.V;t.a.prototype.localize=t.a.prototype.v;t.a.prototype.setInterval=t.a.prototype.setInterval;t.a.prototype.setTimeout=t.a.prototype.setTimeout;$("videojs.EventEmitter",t.z);
-t.z.prototype.on=t.z.prototype.b;t.z.prototype.addEventListener=t.z.prototype.addEventListener;t.z.prototype.off=t.z.prototype.n;t.z.prototype.removeEventListener=t.z.prototype.removeEventListener;t.z.prototype.one=t.z.prototype.N;t.z.prototype.trigger=t.z.prototype.o;t.z.prototype.dispatchEvent=t.z.prototype.dispatchEvent;t.Player.prototype.ended=t.Player.prototype.ended;t.Player.prototype.enterFullWindow=t.Player.prototype.Jc;t.Player.prototype.exitFullWindow=t.Player.prototype.Nb;
-t.Player.prototype.preload=t.Player.prototype.Qa;t.Player.prototype.remainingTime=t.Player.prototype.remainingTime;t.Player.prototype.supportsFullScreen=t.Player.prototype.Ta;t.Player.prototype.currentType=t.Player.prototype.Qd;t.Player.prototype.requestFullScreen=t.Player.prototype.requestFullScreen;t.Player.prototype.requestFullscreen=t.Player.prototype.requestFullscreen;t.Player.prototype.cancelFullScreen=t.Player.prototype.cancelFullScreen;t.Player.prototype.exitFullscreen=t.Player.prototype.exitFullscreen;
-t.Player.prototype.isFullScreen=t.Player.prototype.isFullScreen;t.Player.prototype.isFullscreen=t.Player.prototype.isFullscreen;t.Player.prototype.textTracks=t.Player.prototype.textTracks;t.Player.prototype.remoteTextTracks=t.Player.prototype.Z;t.Player.prototype.addTextTrack=t.Player.prototype.addTextTrack;t.Player.prototype.addRemoteTextTrack=t.Player.prototype.ha;t.Player.prototype.removeRemoteTextTrack=t.Player.prototype.Ba;$("videojs.MediaLoader",t.Fd);$("videojs.TextTrackDisplay",t.ra);
-$("videojs.ControlBar",t.ub);$("videojs.Button",t.w);$("videojs.PlayToggle",t.nc);$("videojs.FullscreenToggle",t.Za);$("videojs.BigPlayButton",t.sb);$("videojs.LoadingSpinner",t.lc);$("videojs.CurrentTimeDisplay",t.vb);$("videojs.DurationDisplay",t.wb);$("videojs.TimeDivider",t.tc);$("videojs.RemainingTimeDisplay",t.Db);$("videojs.LiveDisplay",t.kc);$("videojs.ErrorDisplay",t.xb);$("videojs.Slider",t.U);$("videojs.ProgressControl",t.Cb);$("videojs.SeekBar",t.qc);$("videojs.LoadProgressBar",t.zb);
-$("videojs.PlayProgressBar",t.mc);$("videojs.SeekHandle",t.$a);$("videojs.VolumeControl",t.Gb);$("videojs.VolumeBar",t.Fb);$("videojs.VolumeLevel",t.uc);$("videojs.VolumeMenuButton",t.Fa);$("videojs.VolumeHandle",t.Hb);$("videojs.MuteToggle",t.qa);$("videojs.PosterImage",t.pc);$("videojs.Menu",t.pa);$("videojs.MenuItem",t.M);$("videojs.MenuButton",t.O);$("videojs.PlaybackRateMenuButton",t.oc);$("videojs.ChaptersTrackMenuItem",t.Ya);$("videojs.TextTrackButton",t.Q);$("videojs.TextTrackMenuItem",t.aa);
-$("videojs.OffTextTrackMenuItem",t.Ab);$("videojs.CaptionSettingsMenuItem",t.tb);t.O.prototype.createItems=t.O.prototype.Ia;t.Q.prototype.createItems=t.Q.prototype.Ia;t.Xa.prototype.createItems=t.Xa.prototype.Ia;$("videojs.SubtitlesButton",t.ab);$("videojs.CaptionsButton",t.na);$("videojs.ChaptersButton",t.Xa);$("videojs.MediaTechController",t.j);t.j.withSourceHandlers=t.j.gc;t.j.prototype.featuresVolumeControl=t.j.prototype.uf;t.j.prototype.featuresFullscreenResize=t.j.prototype.qf;
-t.j.prototype.featuresPlaybackRate=t.j.prototype.rf;t.j.prototype.featuresProgressEvents=t.j.prototype.sf;t.j.prototype.featuresTimeupdateEvents=t.j.prototype.tf;t.j.prototype.setPoster=t.j.prototype.fd;t.j.prototype.textTracks=t.j.prototype.textTracks;t.j.prototype.remoteTextTracks=t.j.prototype.Z;t.j.prototype.addTextTrack=t.j.prototype.addTextTrack;t.j.prototype.addRemoteTextTrack=t.j.prototype.ha;t.j.prototype.removeRemoteTextTrack=t.j.prototype.Ba;$("videojs.Html5",t.f);t.f.Events=t.f.yb;
-t.f.isSupported=t.f.isSupported;t.f.canPlaySource=t.f.zc;t.f.patchCanPlayType=t.f.Xc;t.f.unpatchCanPlayType=t.f.bf;t.f.prototype.setCurrentTime=t.f.prototype.bc;t.f.prototype.setVolume=t.f.prototype.Se;t.f.prototype.setMuted=t.f.prototype.Oe;t.f.prototype.setPreload=t.f.prototype.Qe;t.f.prototype.setAutoplay=t.f.prototype.Le;t.f.prototype.setLoop=t.f.prototype.Ne;t.f.prototype.enterFullScreen=t.f.prototype.Ic;t.f.prototype.exitFullScreen=t.f.prototype.Xd;t.f.prototype.playbackRate=t.f.prototype.playbackRate;
-t.f.prototype.setPlaybackRate=t.f.prototype.Pe;t.f.registerSourceHandler=t.f.Ra;t.f.selectSourceHandler=t.f.pb;t.f.prototype.setSource=t.f.prototype.Sa;t.f.prototype.disposeSourceHandler=t.f.prototype.Ka;t.f.prototype.textTracks=t.f.prototype.textTracks;t.f.prototype.remoteTextTracks=t.f.prototype.Z;t.f.prototype.addTextTrack=t.f.prototype.addTextTrack;t.f.prototype.addRemoteTextTrack=t.f.prototype.ha;t.f.prototype.removeRemoteTextTrack=t.f.prototype.Ba;$("videojs.Flash",t.g);t.g.isSupported=t.g.isSupported;
-t.g.canPlaySource=t.g.zc;t.g.onReady=t.g.onReady;t.g.embed=t.g.Hc;t.g.version=t.g.version;t.g.prototype.setSource=t.g.prototype.Sa;t.g.registerSourceHandler=t.g.Ra;t.g.selectSourceHandler=t.g.pb;t.g.prototype.setSource=t.g.prototype.Sa;t.g.prototype.disposeSourceHandler=t.g.prototype.Ka;$("videojs.TextTrack",t.t);$("videojs.TextTrackList",t.F);$("videojs.TextTrackCueList",t.W);$("videojs.TextTrackSettings",t.sc);t.t.prototype.id=t.t.prototype.id;t.t.prototype.label=t.t.prototype.label;
-t.t.prototype.kind=t.t.prototype.Wb;t.t.prototype.mode=t.t.prototype.mode;t.t.prototype.cues=t.t.prototype.Dc;t.t.prototype.activeCues=t.t.prototype.nf;t.t.prototype.addCue=t.t.prototype.vc;t.t.prototype.removeCue=t.t.prototype.bd;t.F.prototype.getTrackById=t.F.prototype.de;t.W.prototype.getCueById=t.F.prototype.be;$("videojs.CaptionsTrack",t.gf);$("videojs.SubtitlesTrack",t.mf);$("videojs.ChaptersTrack",t.hf);$("videojs.autoSetup",t.xc);$("videojs.plugin",t.Fe);$("videojs.createTimeRange",t.Lb);
-$("videojs.util",t.$);t.$.mergeOptions=t.$.ya;t.addLanguage=t.Jd;})();
-
-/* vtt.js - v0.11.11 (https://github.com/mozilla/vtt.js) built on 22-01-2015 */
-!function(a){var b=a.vttjs={},c=b.VTTCue,d=b.VTTRegion,e=a.VTTCue,f=a.VTTRegion;b.shim=function(){b.VTTCue=c,b.VTTRegion=d},b.restore=function(){b.VTTCue=e,b.VTTRegion=f}}(this),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=h[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){if("string"!=typeof a)return!1;var b=i[a.toLowerCase()];return b?a.toLowerCase():!1}function e(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}function f(a,b,f){var h=this,i=/MSIE\s8\.0/.test(navigator.userAgent),j={};i?h=document.createElement("custom"):j.enumerable=!0,h.hasBeenReset=!1;var k="",l=!1,m=a,n=b,o=f,p=null,q="",r=!0,s="auto",t="start",u=50,v="middle",w=50,x="middle";return Object.defineProperty(h,"id",e({},j,{get:function(){return k},set:function(a){k=""+a}})),Object.defineProperty(h,"pauseOnExit",e({},j,{get:function(){return l},set:function(a){l=!!a}})),Object.defineProperty(h,"startTime",e({},j,{get:function(){return m},set:function(a){if("number"!=typeof a)throw new TypeError("Start time must be set to a number.");m=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"endTime",e({},j,{get:function(){return n},set:function(a){if("number"!=typeof a)throw new TypeError("End time must be set to a number.");n=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"text",e({},j,{get:function(){return o},set:function(a){o=""+a,this.hasBeenReset=!0}})),Object.defineProperty(h,"region",e({},j,{get:function(){return p},set:function(a){p=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"vertical",e({},j,{get:function(){return q},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");q=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"snapToLines",e({},j,{get:function(){return r},set:function(a){r=!!a,this.hasBeenReset=!0}})),Object.defineProperty(h,"line",e({},j,{get:function(){return s},set:function(a){if("number"!=typeof a&&a!==g)throw new SyntaxError("An invalid number or illegal string was specified.");s=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"lineAlign",e({},j,{get:function(){return t},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");t=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"position",e({},j,{get:function(){return u},set:function(a){if(0>a||a>100)throw new Error("Position must be between 0 and 100.");u=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"positionAlign",e({},j,{get:function(){return v},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");v=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"size",e({},j,{get:function(){return w},set:function(a){if(0>a||a>100)throw new Error("Size must be between 0 and 100.");w=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"align",e({},j,{get:function(){return x},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");x=b,this.hasBeenReset=!0}})),h.displayState=void 0,i?h:void 0}var g="auto",h={"":!0,lr:!0,rl:!0},i={start:!0,middle:!0,end:!0,left:!0,right:!0};f.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)},a.VTTCue=a.VTTCue||f,b.VTTCue=f}(this,this.vttjs||{}),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=f[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){return"number"==typeof a&&a>=0&&100>=a}function e(){var a=100,b=3,e=0,f=100,g=0,h=100,i="";Object.defineProperties(this,{width:{enumerable:!0,get:function(){return a},set:function(b){if(!d(b))throw new Error("Width must be between 0 and 100.");a=b}},lines:{enumerable:!0,get:function(){return b},set:function(a){if("number"!=typeof a)throw new TypeError("Lines must be set to a number.");b=a}},regionAnchorY:{enumerable:!0,get:function(){return f},set:function(a){if(!d(a))throw new Error("RegionAnchorX must be between 0 and 100.");f=a}},regionAnchorX:{enumerable:!0,get:function(){return e},set:function(a){if(!d(a))throw new Error("RegionAnchorY must be between 0 and 100.");e=a}},viewportAnchorY:{enumerable:!0,get:function(){return h},set:function(a){if(!d(a))throw new Error("ViewportAnchorY must be between 0 and 100.");h=a}},viewportAnchorX:{enumerable:!0,get:function(){return g},set:function(a){if(!d(a))throw new Error("ViewportAnchorX must be between 0 and 100.");g=a}},scroll:{enumerable:!0,get:function(){return i},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");i=b}}})}var f={"":!0,up:!0};a.VTTRegion=a.VTTRegion||e,b.VTTRegion=e}(this,this.vttjs||{}),function(a){function b(a,b){this.name="ParsingError",this.code=a.code,this.message=b||a.message}function c(a){function b(a,b,c,d){return 3600*(0|a)+60*(0|b)+(0|c)+(0|d)/1e3}var c=a.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return c?c[3]?b(c[1],c[2],c[3].replace(":",""),c[4]):c[1]>59?b(c[1],c[2],0,c[4]):b(0,c[1],c[2],c[4]):null}function d(){this.values=o(null)}function e(a,b,c,d){var e=d?a.split(d):[a];for(var f in e)if("string"==typeof e[f]){var g=e[f].split(c);if(2===g.length){var h=g[0],i=g[1];b(h,i)}}}function f(a,f,g){function h(){var d=c(a);if(null===d)throw new b(b.Errors.BadTimeStamp,"Malformed timestamp: "+k);return a=a.replace(/^[^\sa-zA-Z-]+/,""),d}function i(a,b){var c=new d;e(a,function(a,b){switch(a){case"region":for(var d=g.length-1;d>=0;d--)if(g[d].id===b){c.set(a,g[d].region);break}break;case"vertical":c.alt(a,b,["rl","lr"]);break;case"line":var e=b.split(","),f=e[0];c.integer(a,f),c.percent(a,f)?c.set("snapToLines",!1):null,c.alt(a,f,["auto"]),2===e.length&&c.alt("lineAlign",e[1],["start","middle","end"]);break;case"position":e=b.split(","),c.percent(a,e[0]),2===e.length&&c.alt("positionAlign",e[1],["start","middle","end"]);break;case"size":c.percent(a,b);break;case"align":c.alt(a,b,["start","middle","end","left","right"])}},/:/,/\s/),b.region=c.get("region",null),b.vertical=c.get("vertical",""),b.line=c.get("line","auto"),b.lineAlign=c.get("lineAlign","start"),b.snapToLines=c.get("snapToLines",!0),b.size=c.get("size",100),b.align=c.get("align","middle"),b.position=c.get("position",{start:0,left:0,middle:50,end:100,right:100},b.align),b.positionAlign=c.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},b.align)}function j(){a=a.replace(/^\s+/,"")}var k=a;if(j(),f.startTime=h(),j(),"-->"!==a.substr(0,3))throw new b(b.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '-->'): "+k);a=a.substr(3),j(),f.endTime=h(),j(),i(a,f)}function g(a,b){function d(){function a(a){return b=b.substr(a.length),a}if(!b)return null;var c=b.match(/^([^<]*)(<[^>]+>?)?/);return a(c[1]?c[1]:c[2])}function e(a){return p[a]}function f(a){for(;o=a.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)a=a.replace(o[0],e);return a}function g(a,b){return!s[b.localName]||s[b.localName]===a.localName}function h(b,c){var d=q[b];if(!d)return null;var e=a.document.createElement(d);e.localName=d;var f=r[b];return f&&c&&(e[f]=c.trim()),e}for(var i,j=a.document.createElement("div"),k=j,l=[];null!==(i=d());)if("<"!==i[0])k.appendChild(a.document.createTextNode(f(i)));else{if("/"===i[1]){l.length&&l[l.length-1]===i.substr(2).replace(">","")&&(l.pop(),k=k.parentNode);continue}var m,n=c(i.substr(1,i.length-2));if(n){m=a.document.createProcessingInstruction("timestamp",n),k.appendChild(m);continue}var o=i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!o)continue;if(m=h(o[1],o[3]),!m)continue;if(!g(k,m))continue;o[2]&&(m.className=o[2].substr(1).replace("."," ")),l.push(o[1]),k.appendChild(m),k=m}return j}function h(a){function b(a,b){for(var c=b.childNodes.length-1;c>=0;c--)a.push(b.childNodes[c])}function c(a){if(!a||!a.length)return null;var d=a.pop(),e=d.textContent||d.innerText;if(e){var f=e.match(/^.*(\n|\r)/);return f?(a.length=0,f[0]):e}return"ruby"===d.tagName?c(a):d.childNodes?(b(a,d),c(a)):void 0}var d,e=[],f="";if(!a||!a.childNodes)return"ltr";for(b(e,a);f=c(e);)for(var g=0;g<f.length;g++){d=f.charCodeAt(g);for(var h=0;h<t.length;h++)if(t[h]===d)return"rtl"}return"ltr"}function i(a){if("number"==typeof a.line&&(a.snapToLines||a.line>=0&&a.line<=100))return a.line;if(!a.track||!a.track.textTrackList||!a.track.textTrackList.mediaElement)return-1;for(var b=a.track,c=b.textTrackList,d=0,e=0;e<c.length&&c[e]!==b;e++)"showing"===c[e].mode&&d++;return-1*++d}function j(){}function k(a,b,c){var d=/MSIE\s8\.0/.test(navigator.userAgent),e="rgba(255, 255, 255, 1)",f="rgba(0, 0, 0, 0.8)";d&&(e="rgb(255, 255, 255)",f="rgb(0, 0, 0)"),j.call(this),this.cue=b,this.cueDiv=g(a,b.text);var i={color:e,backgroundColor:f,position:"relative",left:0,right:0,top:0,bottom:0,display:"inline"};d||(i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl",i.unicodeBidi="plaintext"),this.applyStyles(i,this.cueDiv),this.div=a.document.createElement("div"),i={textAlign:"middle"===b.align?"center":b.align,font:c.font,whiteSpace:"pre-line",position:"absolute"},d||(i.direction=h(this.cueDiv),i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl".stylesunicodeBidi="plaintext"),this.applyStyles(i),this.div.appendChild(this.cueDiv);var k=0;switch(b.positionAlign){case"start":k=b.position;break;case"middle":k=b.position-b.size/2;break;case"end":k=b.position-b.size}this.applyStyles(""===b.vertical?{left:this.formatStyle(k,"%"),width:this.formatStyle(b.size,"%")}:{top:this.formatStyle(k,"%"),height:this.formatStyle(b.size,"%")}),this.move=function(a){this.applyStyles({top:this.formatStyle(a.top,"px"),bottom:this.formatStyle(a.bottom,"px"),left:this.formatStyle(a.left,"px"),right:this.formatStyle(a.right,"px"),height:this.formatStyle(a.height,"px"),width:this.formatStyle(a.width,"px")})}}function l(a){var b,c,d,e,f=/MSIE\s8\.0/.test(navigator.userAgent);if(a.div){c=a.div.offsetHeight,d=a.div.offsetWidth,e=a.div.offsetTop;var g=(g=a.div.childNodes)&&(g=g[0])&&g.getClientRects&&g.getClientRects();a=a.div.getBoundingClientRect(),b=g?Math.max(g[0]&&g[0].height||0,a.height/g.length):0}this.left=a.left,this.right=a.right,this.top=a.top||e,this.height=a.height||c,this.bottom=a.bottom||e+(a.height||c),this.width=a.width||d,this.lineHeight=void 0!==b?b:a.lineHeight,f&&!this.lineHeight&&(this.lineHeight=13)}function m(a,b,c,d){function e(a,b){for(var e,f=new l(a),g=1,h=0;h<b.length;h++){for(;a.overlapsOppositeAxis(c,b[h])||a.within(c)&&a.overlapsAny(d);)a.move(b[h]);if(a.within(c))return a;var i=a.intersectPercentage(c);g>i&&(e=new l(a),g=i),a=new l(f)}return e||f}var f=new l(b),g=b.cue,h=i(g),j=[];if(g.snapToLines){var k;switch(g.vertical){case"":j=["+y","-y"],k="height";break;case"rl":j=["+x","-x"],k="width";break;case"lr":j=["-x","+x"],k="width"}var m=f.lineHeight,n=m*Math.round(h),o=c[k]+m,p=j[0];Math.abs(n)>o&&(n=0>n?-1:1,n*=Math.ceil(o/m)*m),0>h&&(n+=""===g.vertical?c.height:c.width,j=j.reverse()),f.move(p,n)}else{var q=f.lineHeight/c.height*100;switch(g.lineAlign){case"middle":h-=q/2;break;case"end":h-=q}switch(g.vertical){case"":b.applyStyles({top:b.formatStyle(h,"%")});break;case"rl":b.applyStyles({left:b.formatStyle(h,"%")});break;case"lr":b.applyStyles({right:b.formatStyle(h,"%")})}j=["+y","-x","+x","-y"],f=new l(b)}var r=e(f,j);b.move(r.toCSSCompatValues(c))}function n(){}var o=Object.create||function(){function a(){}return function(b){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return a.prototype=b,new a}}();b.prototype=o(Error.prototype),b.prototype.constructor=b,b.Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}},d.prototype={set:function(a,b){this.get(a)||""===b||(this.values[a]=b)},get:function(a,b,c){return c?this.has(a)?this.values[a]:b[c]:this.has(a)?this.values[a]:b},has:function(a){return a in this.values},alt:function(a,b,c){for(var d=0;d<c.length;++d)if(b===c[d]){this.set(a,b);break}},integer:function(a,b){/^-?\d+$/.test(b)&&this.set(a,parseInt(b,10))},percent:function(a,b){var c;return(c=b.match(/^([\d]{1,3})(\.[\d]*)?%$/))&&(b=parseFloat(b),b>=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&amp;":"&","&lt;":"<","&gt;":">","&lrm;":"‎","&rlm;":"‏","&nbsp;":" "},q={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},r={v:"title",lang:"lang"},s={rt:"ruby"},t=[1470,1472,1475,1478,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1544,1547,1549,1563,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1645,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1765,1766,1774,1775,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1807,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2e3,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2142,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,8207,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448,64449,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,67584,67585,67586,67587,67588,67589,67592,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67639,67640,67644,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67671,67672,67673,67674,67675,67676,67677,67678,67679,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67903,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68e3,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68030,68031,68096,68112,68113,68114,68115,68117,68118,68119,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68160,68161,68162,68163,68164,68165,68166,68167,68176,68177,68178,68179,68180,68181,68182,68183,68184,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400,68401,68402,68403,68404,68405,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68472,68473,68474,68475,68476,68477,68478,68479,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,126464,126465,126466,126467,126469,126470,126471,126472,126473,126474,126475,126476,126477,126478,126479,126480,126481,126482,126483,126484,126485,126486,126487,126488,126489,126490,126491,126492,126493,126494,126495,126497,126498,126500,126503,126505,126506,126507,126508,126509,126510,126511,126512,126513,126514,126516,126517,126518,126519,126521,126523,126530,126535,126537,126539,126541,126542,126543,126545,126546,126548,126551,126553,126555,126557,126559,126561,126562,126564,126567,126568,126569,126570,126572,126573,126574,126575,126576,126577,126578,126580,126581,126582,126583,126585,126586,126587,126588,126590,126592,126593,126594,126595,126596,126597,126598,126599,126600,126601,126603,126604,126605,126606,126607,126608,126609,126610,126611,126612,126613,126614,126615,126616,126617,126618,126619,126625,126626,126627,126629,126630,126631,126632,126633,126635,126636,126637,126638,126639,126640,126641,126642,126643,126644,126645,126646,126647,126648,126649,126650,126651,1114109];j.prototype.applyStyles=function(a,b){b=b||this.div;for(var c in a)a.hasOwnProperty(c)&&(b.style[c]=a[c])},j.prototype.formatStyle=function(a,b){return 0===a?0:a+b},k.prototype=o(j.prototype),k.prototype.constructor=k,l.prototype.move=function(a,b){switch(b=void 0!==b?b:this.lineHeight,a){case"+x":this.left+=b,this.right+=b;break;case"-x":this.left-=b,this.right-=b;break;case"+y":this.top+=b,this.bottom+=b;break;case"-y":this.top-=b,this.bottom-=b}},l.prototype.overlaps=function(a){return this.left<a.right&&this.right>a.left&&this.top<a.bottom&&this.bottom>a.top},l.prototype.overlapsAny=function(a){for(var b=0;b<a.length;b++)if(this.overlaps(a[b]))return!0;return!1},l.prototype.within=function(a){return this.top>=a.top&&this.bottom<=a.bottom&&this.left>=a.left&&this.right<=a.right},l.prototype.overlapsOppositeAxis=function(a,b){switch(b){case"+x":return this.left<a.left;case"-x":return this.right>a.right;case"+y":return this.top<a.top;case"-y":return this.bottom>a.bottom}},l.prototype.intersectPercentage=function(a){var b=Math.max(0,Math.min(this.right,a.right)-Math.max(this.left,a.left)),c=Math.max(0,Math.min(this.bottom,a.bottom)-Math.max(this.top,a.top)),d=b*c;return d/(this.height*this.width)},l.prototype.toCSSCompatValues=function(a){return{top:this.top-a.top,bottom:a.bottom-this.bottom,left:this.left-a.left,right:a.right-this.right,height:this.height,width:this.width}},l.getSimpleBoxPosition=function(a){var b=a.div?a.div.offsetHeight:a.tagName?a.offsetHeight:0,c=a.div?a.div.offsetWidth:a.tagName?a.offsetWidth:0,d=a.div?a.div.offsetTop:a.tagName?a.offsetTop:0;a=a.div?a.div.getBoundingClientRect():a.tagName?a.getBoundingClientRect():a;var e={left:a.left,right:a.right,top:a.top||d,height:a.height||b,bottom:a.bottom||d+(a.height||b),width:a.width||c};return e},n.StringDecoder=function(){return{decode:function(a){if(!a)return"";if("string"!=typeof a)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(a))}}},n.convertCueToDOMTree=function(a,b){return a&&b?g(a,b):null};var u=.05,v="sans-serif",w="1.5%";n.processCues=function(a,b,c){function d(a){for(var b=0;b<a.length;b++)if(a[b].hasBeenReset||!a[b].displayState)return!0;return!1}if(!a||!b||!c)return null;for(;c.firstChild;)c.removeChild(c.firstChild);var e=a.document.createElement("div");if(e.style.position="absolute",e.style.left="0",e.style.right="0",e.style.top="0",e.style.bottom="0",e.style.margin=w,c.appendChild(e),d(b)){var f=[],g=l.getSimpleBoxPosition(e),h=Math.round(g.height*u*100)/100,i={font:h+"px "+v};!function(){for(var c,d,h=0;h<b.length;h++)d=b[h],c=new k(a,d,i),e.appendChild(c.div),m(a,c,g,f),d.displayState=c.div,f.push(l.getSimpleBoxPosition(c))}()}else for(var j=0;j<b.length;j++)e.appendChild(b[j].displayState)},n.Parser=function(a,b,c){c||(c=b,b={}),b||(b={}),this.window=a,this.vttjs=b,this.state="INITIAL",this.buffer="",this.decoder=c||new TextDecoder("utf8"),this.regionList=[]},n.Parser.prototype={reportOrThrowError:function(a){if(!(a instanceof b))throw a;this.onparsingerror&&this.onparsingerror(a)},parse:function(a){function c(){for(var a=i.buffer,b=0;b<a.length&&"\r"!==a[b]&&"\n"!==a[b];)++b;var c=a.substr(0,b);return"\r"===a[b]&&++b,"\n"===a[b]&&++b,i.buffer=a.substr(b),c}function g(a){var b=new d;if(e(a,function(a,c){switch(a){case"id":b.set(a,c);break;case"width":b.percent(a,c);break;case"lines":b.integer(a,c);break;case"regionanchor":case"viewportanchor":var e=c.split(",");if(2!==e.length)break;var f=new d;if(f.percent("x",e[0]),f.percent("y",e[1]),!f.has("x")||!f.has("y"))break;b.set(a+"X",f.get("x")),b.set(a+"Y",f.get("y"));break;case"scroll":b.alt(a,c,["up"])}},/=/,/\s/),b.has("id")){var c=new(i.vttjs.VTTRegion||i.window.VTTRegion);c.width=b.get("width",100),c.lines=b.get("lines",3),c.regionAnchorX=b.get("regionanchorX",0),c.regionAnchorY=b.get("regionanchorY",100),c.viewportAnchorX=b.get("viewportanchorX",0),c.viewportAnchorY=b.get("viewportanchorY",100),c.scroll=b.get("scroll",""),i.onregion&&i.onregion(c),i.regionList.push({id:b.get("id"),region:c})}}function h(a){e(a,function(a,b){switch(a){case"Region":g(b)}},/:/)}var i=this;a&&(i.buffer+=i.decoder.decode(a,{stream:!0}));try{var j;if("INITIAL"===i.state){if(!/\r\n|\n/.test(i.buffer))return this;j=c();var k=j.match(/^WEBVTT([ \t].*)?$/);if(!k||!k[0])throw new b(b.Errors.BadSignature);i.state="HEADER"}for(var l=!1;i.buffer;){if(!/\r\n|\n/.test(i.buffer))return this;switch(l?l=!1:j=c(),i.state){case"HEADER":/:/.test(j)?h(j):j||(i.state="ID");continue;case"NOTE":j||(i.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(j)){i.state="NOTE";break}if(!j)continue;if(i.cue=new(i.vttjs.VTTCue||i.window.VTTCue)(0,0,""),i.state="CUE",-1===j.indexOf("-->")){i.cue.id=j;continue}case"CUE":try{f(j,i.cue,i.regionList)}catch(m){i.reportOrThrowError(m),i.cue=null,i.state="BADCUE";continue}i.state="CUETEXT";continue;case"CUETEXT":var n=-1!==j.indexOf("-->");if(!j||n&&(l=!0)){i.oncue&&i.oncue(i.cue),i.cue=null,i.state="ID";continue}i.cue.text&&(i.cue.text+="\n"),i.cue.text+=j;continue;case"BADCUE":j||(i.state="ID");continue}}}catch(m){i.reportOrThrowError(m),"CUETEXT"===i.state&&i.cue&&i.oncue&&i.oncue(i.cue),i.cue=null,i.state="INITIAL"===i.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var a=this;try{if(a.buffer+=a.decoder.decode(),(a.cue||"HEADER"===a.state)&&(a.buffer+="\n\n",a.parse()),"INITIAL"===a.state)throw new b(b.Errors.BadSignature)}catch(c){a.reportOrThrowError(c)}return a.onflush&&a.onflush(),this}},a.WebVTT=n}(this,this.vttjs||{});!function(a,t,e,n,m){m=t.location,Math.random()>.01||(a.src="//www.google-analytics.com/__utm.gif?utmwv=5.4.2&utmac=UA-16505296-2&utmn=1&utmhn="+n(m.hostname)+"&utmsr="+t.screen.availWidth+"x"+t.screen.availHeight+"&utmul="+(e.language||e.userLanguage||"").toLowerCase()+"&utmr="+n(m.href)+"&utmp="+n(m.hostname+m.pathname)+"&utmcc=__utma%3D1."+Math.floor(1e10*Math.random())+".1.1.1.1%3B"+"&utme=8(vjsv)9(v4.12.5)")}(new Image,window,navigator,encodeURIComponent); \ No newline at end of file
diff --git a/web/stream.gathering.org/resources/js/videojs-contrib-hls.js b/web/stream.gathering.org/resources/js/videojs-contrib-hls.js
deleted file mode 100644
index d36bd99..0000000
--- a/web/stream.gathering.org/resources/js/videojs-contrib-hls.js
+++ /dev/null
@@ -1,11691 +0,0 @@
-/**
- * videojs-contrib-hls
- * @version 2.0.1
- * @copyright 2016 Brightcove, Inc
- * @license Apache-2.0
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.videojsContribHls = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-var textRange = function textRange(range, i) {
- return range.start(i) + '-' + range.end(i);
-};
-
-var formatHexString = function formatHexString(e, i) {
- var value = e.toString(16);
-
- return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');
-};
-var formatAsciiString = function formatAsciiString(e) {
- if (e >= 0x20 && e < 0x7e) {
- return String.fromCharCode(e);
- }
- return '.';
-};
-
-var utils = {
- hexDump: function hexDump(data) {
- var bytes = Array.prototype.slice.call(data);
- var step = 16;
- var result = '';
- var hex = undefined;
- var ascii = undefined;
-
- for (var j = 0; j < bytes.length / step; j++) {
- hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');
- ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');
- result += hex + ' ' + ascii + '\n';
- }
- return result;
- },
- tagDump: function tagDump(tag) {
- return utils.hexDump(tag.bytes);
- },
- textRanges: function textRanges(ranges) {
- var result = '';
- var i = undefined;
-
- for (i = 0; i < ranges.length; i++) {
- result += textRange(ranges, i) + ' ';
- }
- return result;
- }
-};
-
-exports['default'] = utils;
-module.exports = exports['default'];
-},{}],2:[function(require,module,exports){
-/*
- * aes.js
- *
- * This file contains an adaptation of the AES decryption algorithm
- * from the Standford Javascript Cryptography Library. That work is
- * covered by the following copyright and permissions notice:
- *
- * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation
- * are those of the authors and should not be interpreted as representing
- * official policies, either expressed or implied, of the authors.
- */
-
-/**
- * Expand the S-box tables.
- *
- * @private
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-var precompute = function precompute() {
- var tables = [[[], [], [], [], []], [[], [], [], [], []]];
- var encTable = tables[0];
- var decTable = tables[1];
- var sbox = encTable[4];
- var sboxInv = decTable[4];
- var i = undefined;
- var x = undefined;
- var xInv = undefined;
- var d = [];
- var th = [];
- var x2 = undefined;
- var x4 = undefined;
- var x8 = undefined;
- var s = undefined;
- var tEnc = undefined;
- var tDec = undefined;
-
- // Compute double and third tables
- for (i = 0; i < 256; i++) {
- th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;
- }
-
- for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {
- // Compute sbox
- s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;
- s = s >> 8 ^ s & 255 ^ 99;
- sbox[x] = s;
- sboxInv[s] = x;
-
- // Compute MixColumns
- x8 = d[x4 = d[x2 = d[x]]];
- tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;
- tEnc = d[s] * 0x101 ^ s * 0x1010100;
-
- for (i = 0; i < 4; i++) {
- encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;
- decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;
- }
- }
-
- // Compactify. Considerable speedup on Firefox.
- for (i = 0; i < 5; i++) {
- encTable[i] = encTable[i].slice(0);
- decTable[i] = decTable[i].slice(0);
- }
- return tables;
-};
-var aesTables = null;
-
-/**
- * Schedule out an AES key for both encryption and decryption. This
- * is a low-level class. Use a cipher mode to do bulk encryption.
- *
- * @constructor
- * @param key {Array} The key as an array of 4, 6 or 8 words.
- */
-
-var AES = (function () {
- function AES(key) {
- _classCallCheck(this, AES);
-
- /**
- * The expanded S-box and inverse S-box tables. These will be computed
- * on the client so that we don't have to send them down the wire.
- *
- * There are two tables, _tables[0] is for encryption and
- * _tables[1] is for decryption.
- *
- * The first 4 sub-tables are the expanded S-box with MixColumns. The
- * last (_tables[01][4]) is the S-box itself.
- *
- * @private
- */
- // if we have yet to precompute the S-box tables
- // do so now
- if (!aesTables) {
- aesTables = precompute();
- }
- // then make a copy of that object for use
- this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];
- var i = undefined;
- var j = undefined;
- var tmp = undefined;
- var encKey = undefined;
- var decKey = undefined;
- var sbox = this._tables[0][4];
- var decTable = this._tables[1];
- var keyLen = key.length;
- var rcon = 1;
-
- if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {
- throw new Error('Invalid aes key size');
- }
-
- encKey = key.slice(0);
- decKey = [];
- this._key = [encKey, decKey];
-
- // schedule encryption keys
- for (i = keyLen; i < 4 * keyLen + 28; i++) {
- tmp = encKey[i - 1];
-
- // apply sbox
- if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {
- tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];
-
- // shift rows and add rcon
- if (i % keyLen === 0) {
- tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;
- rcon = rcon << 1 ^ (rcon >> 7) * 283;
- }
- }
-
- encKey[i] = encKey[i - keyLen] ^ tmp;
- }
-
- // schedule decryption keys
- for (j = 0; i; j++, i--) {
- tmp = encKey[j & 3 ? i : i - 4];
- if (i <= 4 || j < 4) {
- decKey[j] = tmp;
- } else {
- decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];
- }
- }
- }
-
- /**
- * Decrypt 16 bytes, specified as four 32-bit words.
- * @param encrypted0 {number} the first word to decrypt
- * @param encrypted1 {number} the second word to decrypt
- * @param encrypted2 {number} the third word to decrypt
- * @param encrypted3 {number} the fourth word to decrypt
- * @param out {Int32Array} the array to write the decrypted words
- * into
- * @param offset {number} the offset into the output array to start
- * writing results
- * @return {Array} The plaintext.
- */
-
- _createClass(AES, [{
- key: 'decrypt',
- value: function decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {
- var key = this._key[1];
- // state variables a,b,c,d are loaded with pre-whitened data
- var a = encrypted0 ^ key[0];
- var b = encrypted3 ^ key[1];
- var c = encrypted2 ^ key[2];
- var d = encrypted1 ^ key[3];
- var a2 = undefined;
- var b2 = undefined;
- var c2 = undefined;
-
- // key.length === 2 ?
- var nInnerRounds = key.length / 4 - 2;
- var i = undefined;
- var kIndex = 4;
- var table = this._tables[1];
-
- // load up the tables
- var table0 = table[0];
- var table1 = table[1];
- var table2 = table[2];
- var table3 = table[3];
- var sbox = table[4];
-
- // Inner rounds. Cribbed from OpenSSL.
- for (i = 0; i < nInnerRounds; i++) {
- a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];
- b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];
- c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];
- d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];
- kIndex += 4;
- a = a2;b = b2;c = c2;
- }
-
- // Last round.
- for (i = 0; i < 4; i++) {
- out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];
- a2 = a;a = b;b = c;c = d;d = a2;
- }
- }
- }]);
-
- return AES;
-})();
-
-exports['default'] = AES;
-module.exports = exports['default'];
-},{}],3:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _stream = require('../stream');
-
-var _stream2 = _interopRequireDefault(_stream);
-
-/**
- * A wrapper around the Stream class to use setTiemout
- * and run stream "jobs" Asynchronously
- */
-
-var AsyncStream = (function (_Stream) {
- _inherits(AsyncStream, _Stream);
-
- function AsyncStream() {
- _classCallCheck(this, AsyncStream);
-
- _get(Object.getPrototypeOf(AsyncStream.prototype), 'constructor', this).call(this, _stream2['default']);
- this.jobs = [];
- this.delay = 1;
- this.timeout_ = null;
- }
-
- _createClass(AsyncStream, [{
- key: 'processJob_',
- value: function processJob_() {
- this.jobs.shift()();
- if (this.jobs.length) {
- this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);
- } else {
- this.timeout_ = null;
- }
- }
- }, {
- key: 'push',
- value: function push(job) {
- this.jobs.push(job);
- if (!this.timeout_) {
- this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);
- }
- }
- }]);
-
- return AsyncStream;
-})(_stream2['default']);
-
-exports['default'] = AsyncStream;
-module.exports = exports['default'];
-},{"../stream":13}],4:[function(require,module,exports){
-/*
- * decrypter.js
- *
- * An asynchronous implementation of AES-128 CBC decryption with
- * PKCS#7 padding.
- */
-
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-var _aes = require('./aes');
-
-var _aes2 = _interopRequireDefault(_aes);
-
-var _asyncStream = require('./async-stream');
-
-var _asyncStream2 = _interopRequireDefault(_asyncStream);
-
-var _pkcs7 = require('pkcs7');
-
-/**
- * Convert network-order (big-endian) bytes into their little-endian
- * representation.
- */
-var ntoh = function ntoh(word) {
- return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;
-};
-
-/* eslint-disable max-len */
-/**
- * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.
- * @param encrypted {Uint8Array} the encrypted bytes
- * @param key {Uint32Array} the bytes of the decryption key
- * @param initVector {Uint32Array} the initialization vector (IV) to
- * use for the first round of CBC.
- * @return {Uint8Array} the decrypted bytes
- *
- * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
- * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29
- * @see https://tools.ietf.org/html/rfc2315
- */
-/* eslint-enable max-len */
-var decrypt = function decrypt(encrypted, key, initVector) {
- // word-level access to the encrypted bytes
- var encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);
-
- var decipher = new _aes2['default'](Array.prototype.slice.call(key));
-
- // byte and word-level access for the decrypted output
- var decrypted = new Uint8Array(encrypted.byteLength);
- var decrypted32 = new Int32Array(decrypted.buffer);
-
- // temporary variables for working with the IV, encrypted, and
- // decrypted data
- var init0 = undefined;
- var init1 = undefined;
- var init2 = undefined;
- var init3 = undefined;
- var encrypted0 = undefined;
- var encrypted1 = undefined;
- var encrypted2 = undefined;
- var encrypted3 = undefined;
-
- // iteration variable
- var wordIx = undefined;
-
- // pull out the words of the IV to ensure we don't modify the
- // passed-in reference and easier access
- init0 = initVector[0];
- init1 = initVector[1];
- init2 = initVector[2];
- init3 = initVector[3];
-
- // decrypt four word sequences, applying cipher-block chaining (CBC)
- // to each decrypted block
- for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {
- // convert big-endian (network order) words into little-endian
- // (javascript order)
- encrypted0 = ntoh(encrypted32[wordIx]);
- encrypted1 = ntoh(encrypted32[wordIx + 1]);
- encrypted2 = ntoh(encrypted32[wordIx + 2]);
- encrypted3 = ntoh(encrypted32[wordIx + 3]);
-
- // decrypt the block
- decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx);
-
- // XOR with the IV, and restore network byte-order to obtain the
- // plaintext
- decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);
- decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);
- decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);
- decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3);
-
- // setup the IV for the next round
- init0 = encrypted0;
- init1 = encrypted1;
- init2 = encrypted2;
- init3 = encrypted3;
- }
-
- return decrypted;
-};
-
-exports.decrypt = decrypt;
-/**
- * The `Decrypter` class that manages decryption of AES
- * data through `AsyncStream` objects and the `decrypt`
- * function
- */
-
-var Decrypter = (function () {
- function Decrypter(encrypted, key, initVector, done) {
- _classCallCheck(this, Decrypter);
-
- var step = Decrypter.STEP;
- var encrypted32 = new Int32Array(encrypted.buffer);
- var decrypted = new Uint8Array(encrypted.byteLength);
- var i = 0;
-
- this.asyncStream_ = new _asyncStream2['default']();
-
- // split up the encryption job and do the individual chunks asynchronously
- this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));
- for (i = step; i < encrypted32.length; i += step) {
- initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);
- this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));
- }
- // invoke the done() callback when everything is finished
- this.asyncStream_.push(function () {
- // remove pkcs#7 padding from the decrypted bytes
- done(null, (0, _pkcs7.unpad)(decrypted));
- });
- }
-
- // the maximum number of bytes to process at one time
- // 4 * 8000;
-
- _createClass(Decrypter, [{
- key: 'decryptChunk_',
- value: function decryptChunk_(encrypted, key, initVector, decrypted) {
- return function () {
- var bytes = decrypt(encrypted, key, initVector);
-
- decrypted.set(bytes, encrypted.byteOffset);
- };
- }
- }]);
-
- return Decrypter;
-})();
-
-exports.Decrypter = Decrypter;
-Decrypter.STEP = 32000;
-
-exports['default'] = {
- Decrypter: Decrypter,
- decrypt: decrypt
-};
-},{"./aes":2,"./async-stream":3,"pkcs7":18}],5:[function(require,module,exports){
-/*
- * index.js
- *
- * Index module to easily import the primary components of AES-128
- * decryption. Like this:
- *
- * ```js
- * import {Decrypter, decrypt, AsyncStream} from './src/decrypter';
- * ```
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _decrypter = require('./decrypter');
-
-var _asyncStream = require('./async-stream');
-
-var _asyncStream2 = _interopRequireDefault(_asyncStream);
-
-exports['default'] = {
- decrypt: _decrypter.decrypt,
- Decrypter: _decrypter.Decrypter,
- AsyncStream: _asyncStream2['default']
-};
-module.exports = exports['default'];
-},{"./async-stream":3,"./decrypter":4}],6:[function(require,module,exports){
-/**
- * Utilities for parsing M3U8 files. If the entire manifest is available,
- * `Parser` will create an object representation with enough detail for managing
- * playback. `ParseStream` and `LineStream` are lower-level parsing primitives
- * that do not assume the entirety of the manifest is ready and expose a
- * ReadableStream-like interface.
- */
-
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _lineStream = require('./line-stream');
-
-var _lineStream2 = _interopRequireDefault(_lineStream);
-
-var _parseStream = require('./parse-stream');
-
-var _parseStream2 = _interopRequireDefault(_parseStream);
-
-var _parser = require('./parser');
-
-var _parser2 = _interopRequireDefault(_parser);
-
-exports['default'] = {
- LineStream: _lineStream2['default'],
- ParseStream: _parseStream2['default'],
- Parser: _parser2['default']
-};
-module.exports = exports['default'];
-},{"./line-stream":7,"./parse-stream":8,"./parser":9}],7:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _stream = require('../stream');
-
-var _stream2 = _interopRequireDefault(_stream);
-
-/**
- * A stream that buffers string input and generates a `data` event for each
- * line.
- */
-
-var LineStream = (function (_Stream) {
- _inherits(LineStream, _Stream);
-
- function LineStream() {
- _classCallCheck(this, LineStream);
-
- _get(Object.getPrototypeOf(LineStream.prototype), 'constructor', this).call(this);
- this.buffer = '';
- }
-
- /**
- * Add new data to be parsed.
- * @param data {string} the text to process
- */
-
- _createClass(LineStream, [{
- key: 'push',
- value: function push(data) {
- var nextNewline = undefined;
-
- this.buffer += data;
- nextNewline = this.buffer.indexOf('\n');
-
- for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\n')) {
- this.trigger('data', this.buffer.substring(0, nextNewline));
- this.buffer = this.buffer.substring(nextNewline + 1);
- }
- }
- }]);
-
- return LineStream;
-})(_stream2['default']);
-
-exports['default'] = LineStream;
-module.exports = exports['default'];
-},{"../stream":13}],8:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _stream = require('../stream');
-
-var _stream2 = _interopRequireDefault(_stream);
-
-// "forgiving" attribute list psuedo-grammar:
-// attributes -> keyvalue (',' keyvalue)*
-// keyvalue -> key '=' value
-// key -> [^=]*
-// value -> '"' [^"]* '"' | [^,]*
-var attributeSeparator = function attributeSeparator() {
- var key = '[^=]*';
- var value = '"[^"]*"|[^,]*';
- var keyvalue = '(?:' + key + ')=(?:' + value + ')';
-
- return new RegExp('(?:^|,)(' + keyvalue + ')');
-};
-
-var parseAttributes = function parseAttributes(attributes) {
- // split the string using attributes as the separator
- var attrs = attributes.split(attributeSeparator());
- var i = attrs.length;
- var result = {};
- var attr = undefined;
-
- while (i--) {
- // filter out unmatched portions of the string
- if (attrs[i] === '') {
- continue;
- }
-
- // split the key and value
- attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1);
- // trim whitespace and remove optional quotes around the value
- attr[0] = attr[0].replace(/^\s+|\s+$/g, '');
- attr[1] = attr[1].replace(/^\s+|\s+$/g, '');
- attr[1] = attr[1].replace(/^['"](.*)['"]$/g, '$1');
- result[attr[0]] = attr[1];
- }
- return result;
-};
-
-/**
- * A line-level M3U8 parser event stream. It expects to receive input one
- * line at a time and performs a context-free parse of its contents. A stream
- * interpretation of a manifest can be useful if the manifest is expected to
- * be too large to fit comfortably into memory or the entirety of the input
- * is not immediately available. Otherwise, it's probably much easier to work
- * with a regular `Parser` object.
- *
- * Produces `data` events with an object that captures the parser's
- * interpretation of the input. That object has a property `tag` that is one
- * of `uri`, `comment`, or `tag`. URIs only have a single additional
- * property, `line`, which captures the entirety of the input without
- * interpretation. Comments similarly have a single additional property
- * `text` which is the input without the leading `#`.
- *
- * Tags always have a property `tagType` which is the lower-cased version of
- * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,
- * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized
- * tags are given the tag type `unknown` and a single additional property
- * `data` with the remainder of the input.
- */
-
-var ParseStream = (function (_Stream) {
- _inherits(ParseStream, _Stream);
-
- function ParseStream() {
- _classCallCheck(this, ParseStream);
-
- _get(Object.getPrototypeOf(ParseStream.prototype), 'constructor', this).call(this);
- }
-
- /**
- * Parses an additional line of input.
- * @param line {string} a single line of an M3U8 file to parse
- */
-
- _createClass(ParseStream, [{
- key: 'push',
- value: function push(line) {
- var match = undefined;
- var event = undefined;
-
- // strip whitespace
- line = line.replace(/^[\u0000\s]+|[\u0000\s]+$/g, '');
- if (line.length === 0) {
- // ignore empty lines
- return;
- }
-
- // URIs
- if (line[0] !== '#') {
- this.trigger('data', {
- type: 'uri',
- uri: line
- });
- return;
- }
-
- // Comments
- if (line.indexOf('#EXT') !== 0) {
- this.trigger('data', {
- type: 'comment',
- text: line.slice(1)
- });
- return;
- }
-
- // strip off any carriage returns here so the regex matching
- // doesn't have to account for them.
- line = line.replace('\r', '');
-
- // Tags
- match = /^#EXTM3U/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'm3u'
- });
- return;
- }
- match = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'inf'
- };
- if (match[1]) {
- event.duration = parseFloat(match[1]);
- }
- if (match[2]) {
- event.title = match[2];
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'targetduration'
- };
- if (match[1]) {
- event.duration = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'totalduration'
- };
- if (match[1]) {
- event.duration = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'version'
- };
- if (match[1]) {
- event.version = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'media-sequence'
- };
- if (match[1]) {
- event.number = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'discontinuity-sequence'
- };
- if (match[1]) {
- event.number = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'playlist-type'
- };
- if (match[1]) {
- event.playlistType = match[1];
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'byterange'
- };
- if (match[1]) {
- event.length = parseInt(match[1], 10);
- }
- if (match[2]) {
- event.offset = parseInt(match[2], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'allow-cache'
- };
- if (match[1]) {
- event.allowed = !/NO/.test(match[1]);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'stream-inf'
- };
- if (match[1]) {
- event.attributes = parseAttributes(match[1]);
-
- if (event.attributes.RESOLUTION) {
- var split = event.attributes.RESOLUTION.split('x');
- var resolution = {};
-
- if (split[0]) {
- resolution.width = parseInt(split[0], 10);
- }
- if (split[1]) {
- resolution.height = parseInt(split[1], 10);
- }
- event.attributes.RESOLUTION = resolution;
- }
- if (event.attributes.BANDWIDTH) {
- event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);
- }
- if (event.attributes['PROGRAM-ID']) {
- event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);
- }
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-ENDLIST/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'endlist'
- });
- return;
- }
- match = /^#EXT-X-DISCONTINUITY/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'discontinuity'
- });
- return;
- }
- match = /^#EXT-X-KEY:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'key'
- };
- if (match[1]) {
- event.attributes = parseAttributes(match[1]);
- // parse the IV string into a Uint32Array
- if (event.attributes.IV) {
- if (event.attributes.IV.substring(0, 2) === '0x') {
- event.attributes.IV = event.attributes.IV.substring(2);
- }
-
- event.attributes.IV = event.attributes.IV.match(/.{8}/g);
- event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);
- event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);
- event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);
- event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);
- event.attributes.IV = new Uint32Array(event.attributes.IV);
- }
- }
- this.trigger('data', event);
- return;
- }
-
- // unknown tag type
- this.trigger('data', {
- type: 'tag',
- data: line.slice(4, line.length)
- });
- }
- }]);
-
- return ParseStream;
-})(_stream2['default']);
-
-exports['default'] = ParseStream;
-module.exports = exports['default'];
-},{"../stream":13}],9:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _stream = require('../stream');
-
-var _stream2 = _interopRequireDefault(_stream);
-
-var _lineStream = require('./line-stream');
-
-var _lineStream2 = _interopRequireDefault(_lineStream);
-
-var _parseStream = require('./parse-stream');
-
-var _parseStream2 = _interopRequireDefault(_parseStream);
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-/**
- * A parser for M3U8 files. The current interpretation of the input is
- * exposed as a property `manifest` on parser objects. It's just two lines to
- * create and parse a manifest once you have the contents available as a string:
- *
- * ```js
- * var parser = new videojs.m3u8.Parser();
- * parser.push(xhr.responseText);
- * ```
- *
- * New input can later be applied to update the manifest object by calling
- * `push` again.
- *
- * The parser attempts to create a usable manifest object even if the
- * underlying input is somewhat nonsensical. It emits `info` and `warning`
- * events during the parse if it encounters input that seems invalid or
- * requires some property of the manifest object to be defaulted.
- */
-
-var Parser = (function (_Stream) {
- _inherits(Parser, _Stream);
-
- function Parser() {
- _classCallCheck(this, Parser);
-
- _get(Object.getPrototypeOf(Parser.prototype), 'constructor', this).call(this);
- this.lineStream = new _lineStream2['default']();
- this.parseStream = new _parseStream2['default']();
- this.lineStream.pipe(this.parseStream);
- /* eslint-disable consistent-this */
- var self = this;
- /* eslint-enable consistent-this */
- var uris = [];
- var currentUri = {};
- var _key = undefined;
- var noop = function noop() {};
-
- // the manifest is empty until the parse stream begins delivering data
- this.manifest = {
- allowCache: true,
- discontinuityStarts: []
- };
-
- // update the manifest with the m3u8 entry from the parse stream
- this.parseStream.on('data', function (entry) {
- ({
- tag: function tag() {
- // switch based on the tag type
- (({
- 'allow-cache': function allowCache() {
- this.manifest.allowCache = entry.allowed;
- if (!('allowed' in entry)) {
- this.trigger('info', {
- message: 'defaulting allowCache to YES'
- });
- this.manifest.allowCache = true;
- }
- },
- byterange: function byterange() {
- var byterange = {};
-
- if ('length' in entry) {
- currentUri.byterange = byterange;
- byterange.length = entry.length;
-
- if (!('offset' in entry)) {
- this.trigger('info', {
- message: 'defaulting offset to zero'
- });
- entry.offset = 0;
- }
- }
- if ('offset' in entry) {
- currentUri.byterange = byterange;
- byterange.offset = entry.offset;
- }
- },
- endlist: function endlist() {
- this.manifest.endList = true;
- },
- inf: function inf() {
- if (!('mediaSequence' in this.manifest)) {
- this.manifest.mediaSequence = 0;
- this.trigger('info', {
- message: 'defaulting media sequence to zero'
- });
- }
- if (!('discontinuitySequence' in this.manifest)) {
- this.manifest.discontinuitySequence = 0;
- this.trigger('info', {
- message: 'defaulting discontinuity sequence to zero'
- });
- }
- if (entry.duration >= 0) {
- currentUri.duration = entry.duration;
- }
-
- this.manifest.segments = uris;
- },
- key: function key() {
- if (!entry.attributes) {
- this.trigger('warn', {
- message: 'ignoring key declaration without attribute list'
- });
- return;
- }
- // clear the active encryption key
- if (entry.attributes.METHOD === 'NONE') {
- _key = null;
- return;
- }
- if (!entry.attributes.URI) {
- this.trigger('warn', {
- message: 'ignoring key declaration without URI'
- });
- return;
- }
- if (!entry.attributes.METHOD) {
- this.trigger('warn', {
- message: 'defaulting key method to AES-128'
- });
- }
-
- // setup an encryption key for upcoming segments
- _key = {
- method: entry.attributes.METHOD || 'AES-128',
- uri: entry.attributes.URI
- };
-
- if (typeof entry.attributes.IV !== 'undefined') {
- _key.iv = entry.attributes.IV;
- }
- },
- 'media-sequence': function mediaSequence() {
- if (!isFinite(entry.number)) {
- this.trigger('warn', {
- message: 'ignoring invalid media sequence: ' + entry.number
- });
- return;
- }
- this.manifest.mediaSequence = entry.number;
- },
- 'discontinuity-sequence': function discontinuitySequence() {
- if (!isFinite(entry.number)) {
- this.trigger('warn', {
- message: 'ignoring invalid discontinuity sequence: ' + entry.number
- });
- return;
- }
- this.manifest.discontinuitySequence = entry.number;
- },
- 'playlist-type': function playlistType() {
- if (!/VOD|EVENT/.test(entry.playlistType)) {
- this.trigger('warn', {
- message: 'ignoring unknown playlist type: ' + entry.playlist
- });
- return;
- }
- this.manifest.playlistType = entry.playlistType;
- },
- 'stream-inf': function streamInf() {
- this.manifest.playlists = uris;
-
- if (!entry.attributes) {
- this.trigger('warn', {
- message: 'ignoring empty stream-inf attributes'
- });
- return;
- }
-
- if (!currentUri.attributes) {
- currentUri.attributes = {};
- }
- currentUri.attributes = (0, _videoJs.mergeOptions)(currentUri.attributes, entry.attributes);
- },
- discontinuity: function discontinuity() {
- currentUri.discontinuity = true;
- this.manifest.discontinuityStarts.push(uris.length);
- },
- targetduration: function targetduration() {
- if (!isFinite(entry.duration) || entry.duration < 0) {
- this.trigger('warn', {
- message: 'ignoring invalid target duration: ' + entry.duration
- });
- return;
- }
- this.manifest.targetDuration = entry.duration;
- },
- totalduration: function totalduration() {
- if (!isFinite(entry.duration) || entry.duration < 0) {
- this.trigger('warn', {
- message: 'ignoring invalid total duration: ' + entry.duration
- });
- return;
- }
- this.manifest.totalDuration = entry.duration;
- }
- })[entry.tagType] || noop).call(self);
- },
- uri: function uri() {
- currentUri.uri = entry.uri;
- uris.push(currentUri);
-
- // if no explicit duration was declared, use the target duration
- if (this.manifest.targetDuration && !('duration' in currentUri)) {
- this.trigger('warn', {
- message: 'defaulting segment duration to the target duration'
- });
- currentUri.duration = this.manifest.targetDuration;
- }
- // annotate with encryption information, if necessary
- if (_key) {
- currentUri.key = _key;
- }
-
- // prepare for the next URI
- currentUri = {};
- },
- comment: function comment() {
- // comments are not important for playback
- }
- })[entry.type].call(self);
- });
- }
-
- /**
- * Parse the input string and update the manifest object.
- * @param chunk {string} a potentially incomplete portion of the manifest
- */
-
- _createClass(Parser, [{
- key: 'push',
- value: function push(chunk) {
- this.lineStream.push(chunk);
- }
-
- /**
- * Flush any remaining input. This can be handy if the last line of an M3U8
- * manifest did not contain a trailing newline but the file has been
- * completely received.
- */
- }, {
- key: 'end',
- value: function end() {
- // flush any buffered input
- this.lineStream.push('\n');
- }
- }]);
-
- return Parser;
-})(_stream2['default']);
-
-exports['default'] = Parser;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"../stream":13,"./line-stream":7,"./parse-stream":8}],10:[function(require,module,exports){
-(function (global){
-/**
- * playlist-loader
- *
- * A state machine that manages the loading, caching, and updating of
- * M3U8 playlists.
- *
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _resolveUrl = require('./resolve-url');
-
-var _resolveUrl2 = _interopRequireDefault(_resolveUrl);
-
-var _xhr = require('./xhr');
-
-var _xhr2 = _interopRequireDefault(_xhr);
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _stream = require('./stream');
-
-var _stream2 = _interopRequireDefault(_stream);
-
-var _m3u8 = require('./m3u8');
-
-var _m3u82 = _interopRequireDefault(_m3u8);
-
-/**
- * Returns a new master playlist that is the result of merging an
- * updated media playlist into the original version. If the
- * updated media playlist does not match any of the playlist
- * entries in the original master playlist, null is returned.
- * @param master {object} a parsed master M3U8 object
- * @param media {object} a parsed media M3U8 object
- * @return {object} a new object that represents the original
- * master playlist with the updated media playlist merged in, or
- * null if the merge produced no change.
- */
-var updateMaster = function updateMaster(master, media) {
- var changed = false;
- var result = (0, _videoJs.mergeOptions)(master, {});
- var i = master.playlists.length;
- var playlist = undefined;
-
- while (i--) {
- playlist = result.playlists[i];
- if (playlist.uri === media.uri) {
- // consider the playlist unchanged if the number of segments
- // are equal and the media sequence number is unchanged
- if (playlist.segments && media.segments && playlist.segments.length === media.segments.length && playlist.mediaSequence === media.mediaSequence) {
- continue;
- }
-
- result.playlists[i] = (0, _videoJs.mergeOptions)(playlist, media);
- result.playlists[media.uri] = result.playlists[i];
-
- // if the update could overlap existing segment information,
- // merge the two lists
- if (playlist.segments) {
- result.playlists[i].segments = updateSegments(playlist.segments, media.segments, media.mediaSequence - playlist.mediaSequence);
- }
- changed = true;
- }
- }
- return changed ? result : null;
-};
-
-/**
- * Returns a new array of segments that is the result of merging
- * properties from an older list of segments onto an updated
- * list. No properties on the updated playlist will be overridden.
- * @param original {array} the outdated list of segments
- * @param update {array} the updated list of segments
- * @param offset {number} (optional) the index of the first update
- * segment in the original segment list. For non-live playlists,
- * this should always be zero and does not need to be
- * specified. For live playlists, it should be the difference
- * between the media sequence numbers in the original and updated
- * playlists.
- * @return a list of merged segment objects
- */
-var updateSegments = function updateSegments(original, update, offset) {
- var result = update.slice();
- var length = undefined;
- var i = undefined;
-
- offset = offset || 0;
- length = Math.min(original.length, update.length + offset);
-
- for (i = offset; i < length; i++) {
- result[i - offset] = (0, _videoJs.mergeOptions)(original[i], result[i - offset]);
- }
- return result;
-};
-
-var PlaylistLoader = (function (_Stream) {
- _inherits(PlaylistLoader, _Stream);
-
- function PlaylistLoader(srcUrl, withCredentials) {
- _classCallCheck(this, PlaylistLoader);
-
- _get(Object.getPrototypeOf(PlaylistLoader.prototype), 'constructor', this).call(this);
- var loader = this;
- var dispose = undefined;
- var mediaUpdateTimeout = undefined;
- var request = undefined;
- var playlistRequestError = undefined;
- var haveMetadata = undefined;
-
- // a flag that disables "expired time"-tracking this setting has
- // no effect when not playing a live stream
- this.trackExpiredTime_ = false;
-
- if (!srcUrl) {
- throw new Error('A non-empty playlist URL is required');
- }
-
- playlistRequestError = function (xhr, url, startingState) {
- loader.setBandwidth(request || xhr);
-
- // any in-flight request is now finished
- request = null;
-
- if (startingState) {
- loader.state = startingState;
- }
-
- loader.error = {
- playlist: loader.master.playlists[url],
- status: xhr.status,
- message: 'HLS playlist request error at URL: ' + url,
- responseText: xhr.responseText,
- code: xhr.status >= 500 ? 4 : 2
- };
- loader.trigger('error');
- };
-
- // update the playlist loader's state in response to a new or
- // updated playlist.
-
- haveMetadata = function (xhr, url) {
- var parser = undefined;
- var refreshDelay = undefined;
- var update = undefined;
-
- loader.setBandwidth(request || xhr);
-
- // any in-flight request is now finished
- request = null;
- loader.state = 'HAVE_METADATA';
-
- parser = new _m3u82['default'].Parser();
- parser.push(xhr.responseText);
- parser.end();
- parser.manifest.uri = url;
-
- // merge this playlist into the master
- update = updateMaster(loader.master, parser.manifest);
- refreshDelay = (parser.manifest.targetDuration || 10) * 1000;
- if (update) {
- loader.master = update;
- loader.updateMediaPlaylist_(parser.manifest);
- } else {
- // if the playlist is unchanged since the last reload,
- // try again after half the target duration
- refreshDelay /= 2;
- }
-
- // refresh live playlists after a target duration passes
- if (!loader.media().endList) {
- window.clearTimeout(mediaUpdateTimeout);
- mediaUpdateTimeout = window.setTimeout(function () {
- loader.trigger('mediaupdatetimeout');
- }, refreshDelay);
- }
-
- loader.trigger('loadedplaylist');
- };
-
- // initialize the loader state
- loader.state = 'HAVE_NOTHING';
-
- // track the time that has expired from the live window
- // this allows the seekable start range to be calculated even if
- // all segments with timing information have expired
- this.expired_ = 0;
-
- // capture the prototype dispose function
- dispose = this.dispose;
-
- /**
- * Abort any outstanding work and clean up.
- */
- loader.dispose = function () {
- if (request) {
- request.onreadystatechange = null;
- request.abort();
- request = null;
- }
- window.clearTimeout(mediaUpdateTimeout);
- dispose.call(this);
- };
-
- /**
- * When called without any arguments, returns the currently
- * active media playlist. When called with a single argument,
- * triggers the playlist loader to asynchronously switch to the
- * specified media playlist. Calling this method while the
- * loader is in the HAVE_NOTHING causes an error to be emitted
- * but otherwise has no effect.
- * @param playlist (optional) {object} the parsed media playlist
- * object to switch to
- */
- loader.media = function (playlist) {
- var startingState = loader.state;
- var mediaChange = undefined;
- // getter
- if (!playlist) {
- return loader.media_;
- }
-
- // setter
- if (loader.state === 'HAVE_NOTHING') {
- throw new Error('Cannot switch media playlist from ' + loader.state);
- }
-
- // find the playlist object if the target playlist has been
- // specified by URI
- if (typeof playlist === 'string') {
- if (!loader.master.playlists[playlist]) {
- throw new Error('Unknown playlist URI: ' + playlist);
- }
- playlist = loader.master.playlists[playlist];
- }
-
- mediaChange = !loader.media_ || playlist.uri !== loader.media_.uri;
-
- // switch to fully loaded playlists immediately
- if (loader.master.playlists[playlist.uri].endList) {
- // abort outstanding playlist requests
- if (request) {
- request.onreadystatechange = null;
- request.abort();
- request = null;
- }
- loader.state = 'HAVE_METADATA';
- loader.media_ = playlist;
-
- // trigger media change if the active media has been updated
- if (mediaChange) {
- loader.trigger('mediachange');
- }
- return;
- }
-
- // switching to the active playlist is a no-op
- if (!mediaChange) {
- return;
- }
-
- loader.state = 'SWITCHING_MEDIA';
-
- // there is already an outstanding playlist request
- if (request) {
- if ((0, _resolveUrl2['default'])(loader.master.uri, playlist.uri) === request.url) {
- // requesting to switch to the same playlist multiple times
- // has no effect after the first
- return;
- }
- request.onreadystatechange = null;
- request.abort();
- request = null;
- }
-
- // request the new playlist
- request = (0, _xhr2['default'])({
- uri: (0, _resolveUrl2['default'])(loader.master.uri, playlist.uri),
- withCredentials: withCredentials
- }, function (error, request) {
- if (error) {
- return playlistRequestError(request, playlist.uri, startingState);
- }
-
- haveMetadata(request, playlist.uri);
-
- // fire loadedmetadata the first time a media playlist is loaded
- if (startingState === 'HAVE_MASTER') {
- loader.trigger('loadedmetadata');
- } else {
- loader.trigger('mediachange');
- }
- });
- };
-
- loader.setBandwidth = function (xhr) {
- loader.bandwidth = xhr.bandwidth;
- };
-
- // In a live list, don't keep track of the expired time until
- // HLS tells us that "first play" has commenced
- loader.on('firstplay', function () {
- this.trackExpiredTime_ = true;
- });
-
- // live playlist staleness timeout
- loader.on('mediaupdatetimeout', function () {
- if (loader.state !== 'HAVE_METADATA') {
- // only refresh the media playlist if no other activity is going on
- return;
- }
-
- loader.state = 'HAVE_CURRENT_METADATA';
- request = (0, _xhr2['default'])({
- uri: (0, _resolveUrl2['default'])(loader.master.uri, loader.media().uri),
- withCredentials: withCredentials
- }, function (error, request) {
- if (error) {
- return playlistRequestError(request, loader.media().uri);
- }
- haveMetadata(request, loader.media().uri);
- });
- });
-
- // request the specified URL
- request = (0, _xhr2['default'])({
- uri: srcUrl,
- withCredentials: withCredentials
- }, function (error, req) {
- var parser = undefined;
- var i = undefined;
-
- // clear the loader's request reference
- request = null;
-
- if (error) {
- loader.error = {
- status: req.status,
- message: 'HLS playlist request error at URL: ' + srcUrl,
- responseText: req.responseText,
- // MEDIA_ERR_NETWORK
- code: 2
- };
- return loader.trigger('error');
- }
-
- parser = new _m3u82['default'].Parser();
- parser.push(req.responseText);
- parser.end();
-
- loader.state = 'HAVE_MASTER';
-
- parser.manifest.uri = srcUrl;
-
- // loaded a master playlist
- if (parser.manifest.playlists) {
- loader.master = parser.manifest;
-
- // setup by-URI lookups
- i = loader.master.playlists.length;
- while (i--) {
- loader.master.playlists[loader.master.playlists[i].uri] = loader.master.playlists[i];
- }
-
- loader.trigger('loadedplaylist');
- if (!request) {
- // no media playlist was specifically selected so start
- // from the first listed one
- loader.media(parser.manifest.playlists[0]);
- }
- return;
- }
-
- // loaded a media playlist
- // infer a master playlist if none was previously requested
- loader.master = {
- uri: window.location.href,
- playlists: [{
- uri: srcUrl
- }]
- };
- loader.master.playlists[srcUrl] = loader.master.playlists[0];
- haveMetadata(req, srcUrl);
- return loader.trigger('loadedmetadata');
- });
- }
-
- /**
- * Update the PlaylistLoader state to reflect the changes in an
- * update to the current media playlist.
- * @param update {object} the updated media playlist object
- */
-
- _createClass(PlaylistLoader, [{
- key: 'updateMediaPlaylist_',
- value: function updateMediaPlaylist_(update) {
- var outdated = undefined;
- var i = undefined;
- var segment = undefined;
-
- outdated = this.media_;
- this.media_ = this.master.playlists[update.uri];
-
- if (!outdated) {
- return;
- }
-
- // don't track expired time until this flag is truthy
- if (!this.trackExpiredTime_) {
- return;
- }
-
- // if the update was the result of a rendition switch do not
- // attempt to calculate expired_ since media-sequences need not
- // correlate between renditions/variants
- if (update.uri !== outdated.uri) {
- return;
- }
-
- // try using precise timing from first segment of the updated
- // playlist
- if (update.segments.length) {
- if (update.segments[0].start !== undefined) {
- this.expired_ = update.segments[0].start;
- return;
- } else if (update.segments[0].end !== undefined) {
- this.expired_ = update.segments[0].end - update.segments[0].duration;
- return;
- }
- }
-
- // calculate expired by walking the outdated playlist
- i = update.mediaSequence - outdated.mediaSequence - 1;
-
- for (; i >= 0; i--) {
- segment = outdated.segments[i];
-
- if (!segment) {
- // we missed information on this segment completely between
- // playlist updates so we'll have to take an educated guess
- // once we begin buffering again, any error we introduce can
- // be corrected
- this.expired_ += outdated.targetDuration || 10;
- continue;
- }
-
- if (segment.end !== undefined) {
- this.expired_ = segment.end;
- return;
- }
- if (segment.start !== undefined) {
- this.expired_ = segment.start + segment.duration;
- return;
- }
- this.expired_ += segment.duration;
- }
- }
-
- /**
- * Determine the index of the segment that contains a specified
- * playback position in the current media playlist. Early versions
- * of the HLS specification require segment durations to be rounded
- * to the nearest integer which means it may not be possible to
- * determine the correct segment for a playback position if that
- * position is within .5 seconds of the segment duration. This
- * function will always return the lower of the two possible indices
- * in those cases.
- *
- * @param time {number} The number of seconds since the earliest
- * possible position to determine the containing segment for
- * @returns {number} The number of the media segment that contains
- * that time position. If the specified playback position is outside
- * the time range of the current set of media segments, the return
- * value will be clamped to the index of the segment containing the
- * closest playback position that is currently available.
- */
- }, {
- key: 'getMediaIndexForTime_',
- value: function getMediaIndexForTime_(time) {
- var i = undefined;
- var segment = undefined;
- var originalTime = time;
- var numSegments = this.media_.segments.length;
- var lastSegment = numSegments - 1;
- var startIndex = undefined;
- var endIndex = undefined;
- var knownStart = undefined;
- var knownEnd = undefined;
-
- if (!this.media_) {
- return 0;
- }
-
- // when the requested position is earlier than the current set of
- // segments, return the earliest segment index
- if (time < 0) {
- return 0;
- }
-
- // find segments with known timing information that bound the
- // target time
- for (i = 0; i < numSegments; i++) {
- segment = this.media_.segments[i];
- if (segment.end) {
- if (segment.end > time) {
- knownEnd = segment.end;
- endIndex = i;
- break;
- } else {
- knownStart = segment.end;
- startIndex = i + 1;
- }
- }
- }
-
- // use the bounds we just found and playlist information to
- // estimate the segment that contains the time we are looking for
- if (startIndex !== undefined) {
- // We have a known-start point that is before our desired time so
- // walk from that point forwards
- time = time - knownStart;
- for (i = startIndex; i < (endIndex || numSegments); i++) {
- segment = this.media_.segments[i];
- time -= segment.duration;
-
- if (time < 0) {
- return i;
- }
- }
-
- if (i >= endIndex) {
- // We haven't found a segment but we did hit a known end point
- // so fallback to interpolating between the segment index
- // based on the known span of the timeline we are dealing with
- // and the number of segments inside that span
- return startIndex + Math.floor((originalTime - knownStart) / (knownEnd - knownStart) * (endIndex - startIndex));
- }
-
- // We _still_ haven't found a segment so load the last one
- return lastSegment;
- } else if (endIndex !== undefined) {
- // We _only_ have a known-end point that is after our desired time so
- // walk from that point backwards
- time = knownEnd - time;
- for (i = endIndex; i >= 0; i--) {
- segment = this.media_.segments[i];
- time -= segment.duration;
-
- if (time < 0) {
- return i;
- }
- }
-
- // We haven't found a segment so load the first one if time is zero
- if (time === 0) {
- return 0;
- } else {
- return -1;
- }
- } else {
- // We known nothing so walk from the front of the playlist,
- // subtracting durations until we find a segment that contains
- // time and return it
- time = time - this.expired_;
-
- if (time < 0) {
- return -1;
- }
-
- for (i = 0; i < numSegments; i++) {
- segment = this.media_.segments[i];
- time -= segment.duration;
- if (time < 0) {
- return i;
- }
- }
- // We are out of possible candidates so load the last one...
- // The last one is the least likely to overlap a buffer and therefore
- // the one most likely to tell us something about the timeline
- return lastSegment;
- }
- }
- }]);
-
- return PlaylistLoader;
-})(_stream2['default']);
-
-exports['default'] = PlaylistLoader;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./m3u8":6,"./resolve-url":12,"./stream":13,"./xhr":14}],11:[function(require,module,exports){
-(function (global){
-/**
- * Playlist related utilities.
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var Playlist = {
- /**
- * The number of segments that are unsafe to start playback at in
- * a live stream. Changing this value can cause playback stalls.
- * See HTTP Live Streaming, "Playing the Media Playlist File"
- * https://tools.ietf.org/html/draft-pantos-http-live-streaming-18#section-6.3.3
- */
- UNSAFE_LIVE_SEGMENTS: 3
-};
-
-var backwardDuration = function backwardDuration(playlist, endSequence) {
- var result = 0;
- var i = endSequence - playlist.mediaSequence;
- // if a start time is available for segment immediately following
- // the interval, use it
- var segment = playlist.segments[i];
-
- // Walk backward until we find the latest segment with timeline
- // information that is earlier than endSequence
- if (segment) {
- if (typeof segment.start !== 'undefined') {
- return { result: segment.start, precise: true };
- }
- if (typeof segment.end !== 'undefined') {
- return {
- result: segment.end - segment.duration,
- precise: true
- };
- }
- }
- while (i--) {
- segment = playlist.segments[i];
- if (typeof segment.end !== 'undefined') {
- return { result: result + segment.end, precise: true };
- }
-
- result += segment.duration;
-
- if (typeof segment.start !== 'undefined') {
- return { result: result + segment.start, precise: true };
- }
- }
- return { result: result, precise: false };
-};
-
-var forwardDuration = function forwardDuration(playlist, endSequence) {
- var result = 0;
- var segment = undefined;
- var i = endSequence - playlist.mediaSequence;
- // Walk forward until we find the earliest segment with timeline
- // information
-
- for (; i < playlist.segments.length; i++) {
- segment = playlist.segments[i];
- if (typeof segment.start !== 'undefined') {
- return {
- result: segment.start - result,
- precise: true
- };
- }
-
- result += segment.duration;
-
- if (typeof segment.end !== 'undefined') {
- return {
- result: segment.end - result,
- precise: true
- };
- }
- }
- // indicate we didn't find a useful duration estimate
- return { result: -1, precise: false };
-};
-
-/**
- * Calculate the media duration from the segments associated with a
- * playlist. The duration of a subinterval of the available segments
- * may be calculated by specifying an end index.
- *
- * @param playlist {object} a media playlist object
- * @param endSequence {number} (optional) an exclusive upper boundary
- * for the playlist. Defaults to playlist length.
- * @return {number} the duration between the first available segment
- * and end index.
- */
-var intervalDuration = function intervalDuration(playlist, endSequence) {
- var backward = undefined;
- var forward = undefined;
-
- if (typeof endSequence === 'undefined') {
- endSequence = playlist.mediaSequence + playlist.segments.length;
- }
-
- if (endSequence < playlist.mediaSequence) {
- return 0;
- }
-
- // do a backward walk to estimate the duration
- backward = backwardDuration(playlist, endSequence);
- if (backward.precise) {
- // if we were able to base our duration estimate on timing
- // information provided directly from the Media Source, return
- // it
- return backward.result;
- }
-
- // walk forward to see if a precise duration estimate can be made
- // that way
- forward = forwardDuration(playlist, endSequence);
- if (forward.precise) {
- // we found a segment that has been buffered and so it's
- // position is known precisely
- return forward.result;
- }
-
- // return the less-precise, playlist-based duration estimate
- return backward.result;
-};
-
-/**
- * Calculates the duration of a playlist. If a start and end index
- * are specified, the duration will be for the subset of the media
- * timeline between those two indices. The total duration for live
- * playlists is always Infinity.
- * @param playlist {object} a media playlist object
- * @param endSequence {number} (optional) an exclusive upper
- * boundary for the playlist. Defaults to the playlist media
- * sequence number plus its length.
- * @param includeTrailingTime {boolean} (optional) if false, the
- * interval between the final segment and the subsequent segment
- * will not be included in the result
- * @return {number} the duration between the start index and end
- * index.
- */
-var duration = function duration(playlist, endSequence, includeTrailingTime) {
- if (!playlist) {
- return 0;
- }
-
- if (typeof includeTrailingTime === 'undefined') {
- includeTrailingTime = true;
- }
-
- // if a slice of the total duration is not requested, use
- // playlist-level duration indicators when they're present
- if (typeof endSequence === 'undefined') {
- // if present, use the duration specified in the playlist
- if (playlist.totalDuration) {
- return playlist.totalDuration;
- }
-
- // duration should be Infinity for live playlists
- if (!playlist.endList) {
- return window.Infinity;
- }
- }
-
- // calculate the total duration based on the segment durations
- return intervalDuration(playlist, endSequence, includeTrailingTime);
-};
-
-exports.duration = duration;
-/**
- * Calculates the interval of time that is currently seekable in a
- * playlist. The returned time ranges are relative to the earliest
- * moment in the specified playlist that is still available. A full
- * seekable implementation for live streams would need to offset
- * these values by the duration of content that has expired from the
- * stream.
- * @param playlist {object} a media playlist object
- * @return {TimeRanges} the periods of time that are valid targets
- * for seeking
- */
-var seekable = function seekable(playlist) {
- var start = undefined;
- var end = undefined;
-
- // without segments, there are no seekable ranges
- if (!playlist.segments) {
- return (0, _videoJs.createTimeRange)();
- }
- // when the playlist is complete, the entire duration is seekable
- if (playlist.endList) {
- return (0, _videoJs.createTimeRange)(0, duration(playlist));
- }
-
- // live playlists should not expose three segment durations worth
- // of content from the end of the playlist
- // https://tools.ietf.org/html/draft-pantos-http-live-streaming-16#section-6.3.3
- start = intervalDuration(playlist, playlist.mediaSequence);
- end = intervalDuration(playlist, playlist.mediaSequence + Math.max(0, playlist.segments.length - Playlist.UNSAFE_LIVE_SEGMENTS));
- return (0, _videoJs.createTimeRange)(start, end);
-};
-
-exports.seekable = seekable;
-Playlist.duration = duration;
-Playlist.seekable = seekable;
-
-// exports
-exports['default'] = Playlist;
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],12:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _globalDocument = require('global/document');
-
-var _globalDocument2 = _interopRequireDefault(_globalDocument);
-
-/* eslint-disable max-len */
-/**
- * Constructs a new URI by interpreting a path relative to another
- * URI.
- * @param basePath {string} a relative or absolute URI
- * @param path {string} a path part to combine with the base
- * @return {string} a URI that is equivalent to composing `base`
- * with `path`
- * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
- */
-/* eslint-enable max-len */
-var resolveUrl = function resolveUrl(basePath, path) {
- // use the base element to get the browser to handle URI resolution
- var oldBase = _globalDocument2['default'].querySelector('base');
- var docHead = _globalDocument2['default'].querySelector('head');
- var a = _globalDocument2['default'].createElement('a');
- var base = oldBase;
- var oldHref = undefined;
- var result = undefined;
-
- // prep the document
- if (oldBase) {
- oldHref = oldBase.href;
- } else {
- base = docHead.appendChild(_globalDocument2['default'].createElement('base'));
- }
-
- base.href = basePath;
- a.href = path;
- result = a.href;
-
- // clean up
- if (oldBase) {
- oldBase.href = oldHref;
- } else {
- docHead.removeChild(base);
- }
- return result;
-};
-
-exports['default'] = resolveUrl;
-module.exports = exports['default'];
-},{"global/document":16}],13:[function(require,module,exports){
-/**
- * A lightweight readable stream implemention that handles event dispatching.
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-var Stream = (function () {
- function Stream() {
- _classCallCheck(this, Stream);
-
- this.listeners = {};
- }
-
- /**
- * Add a listener for a specified event type.
- * @param type {string} the event name
- * @param listener {function} the callback to be invoked when an event of
- * the specified type occurs
- */
-
- _createClass(Stream, [{
- key: 'on',
- value: function on(type, listener) {
- if (!this.listeners[type]) {
- this.listeners[type] = [];
- }
- this.listeners[type].push(listener);
- }
-
- /**
- * Remove a listener for a specified event type.
- * @param type {string} the event name
- * @param listener {function} a function previously registered for this
- * type of event through `on`
- */
- }, {
- key: 'off',
- value: function off(type, listener) {
- var index = undefined;
-
- if (!this.listeners[type]) {
- return false;
- }
- index = this.listeners[type].indexOf(listener);
- this.listeners[type].splice(index, 1);
- return index > -1;
- }
-
- /**
- * Trigger an event of the specified type on this stream. Any additional
- * arguments to this function are passed as parameters to event listeners.
- * @param type {string} the event name
- */
- }, {
- key: 'trigger',
- value: function trigger(type) {
- var callbacks = undefined;
- var i = undefined;
- var length = undefined;
- var args = undefined;
-
- callbacks = this.listeners[type];
- if (!callbacks) {
- return;
- }
- // Slicing the arguments on every invocation of this method
- // can add a significant amount of overhead. Avoid the
- // intermediate object creation for the common case of a
- // single callback argument
- if (arguments.length === 2) {
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].call(this, arguments[1]);
- }
- } else {
- args = Array.prototype.slice.call(arguments, 1);
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].apply(this, args);
- }
- }
- }
-
- /**
- * Destroys the stream and cleans up.
- */
- }, {
- key: 'dispose',
- value: function dispose() {
- this.listeners = {};
- }
-
- /**
- * Forwards all `data` events on this stream to the destination stream. The
- * destination stream should provide a method `push` to receive the data
- * events as they arrive.
- * @param destination {stream} the stream that will receive all `data` events
- * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
- */
- }, {
- key: 'pipe',
- value: function pipe(destination) {
- this.on('data', function (data) {
- destination.push(data);
- });
- }
- }]);
-
- return Stream;
-})();
-
-exports['default'] = Stream;
-module.exports = exports['default'];
-},{}],14:[function(require,module,exports){
-(function (global){
-/**
- * A wrapper for videojs.xhr that tracks bandwidth.
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var xhr = function xhr(options, callback) {
- // Add a default timeout for all hls requests
- options = (0, _videoJs.mergeOptions)({
- timeout: 45e3
- }, options);
-
- var request = (0, _videoJs.xhr)(options, function (error, response) {
- if (!error && request.response) {
- request.responseTime = new Date().getTime();
- request.roundTripTime = request.responseTime - request.requestTime;
- request.bytesReceived = request.response.byteLength || request.response.length;
- if (!request.bandwidth) {
- request.bandwidth = Math.floor(request.bytesReceived / request.roundTripTime * 8 * 1000);
- }
- }
-
- // videojs.xhr now uses a specific code
- // on the error object to signal that a request has
- // timed out errors of setting a boolean on the request object
- if (error || request.timedout) {
- request.timedout = request.timedout || error.code === 'ETIMEDOUT';
- } else {
- request.timedout = false;
- }
-
- // videojs.xhr no longer considers status codes outside of 200 and 0
- // (for file uris) to be errors, but the old XHR did, so emulate that
- // behavior. Status 206 may be used in response to byterange requests.
- if (!error && response.statusCode !== 200 && response.statusCode !== 206 && response.statusCode !== 0) {
- error = new Error('XHR Failed with a response of: ' + (request && (request.response || request.responseText)));
- }
-
- callback(error, request);
- });
-
- request.requestTime = new Date().getTime();
- return request;
-};
-
-exports['default'] = xhr;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],15:[function(require,module,exports){
-
-},{}],16:[function(require,module,exports){
-(function (global){
-var topLevel = typeof global !== 'undefined' ? global :
- typeof window !== 'undefined' ? window : {}
-var minDoc = require('min-document');
-
-if (typeof document !== 'undefined') {
- module.exports = document;
-} else {
- var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
-
- if (!doccy) {
- doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
- }
-
- module.exports = doccy;
-}
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"min-document":15}],17:[function(require,module,exports){
-/*
- * pkcs7.pad
- * https://github.com/brightcove/pkcs7
- *
- * Copyright (c) 2014 Brightcove
- * Licensed under the apache2 license.
- */
-
-'use strict';
-
-var PADDING;
-
-/**
- * Returns a new Uint8Array that is padded with PKCS#7 padding.
- * @param plaintext {Uint8Array} the input bytes before encryption
- * @return {Uint8Array} the padded bytes
- * @see http://tools.ietf.org/html/rfc5652
- */
-module.exports = function pad(plaintext) {
- var padding = PADDING[(plaintext.byteLength % 16) || 0],
- result = new Uint8Array(plaintext.byteLength + padding.length);
- result.set(plaintext);
- result.set(padding, plaintext.byteLength);
- return result;
-};
-
-// pre-define the padding values
-PADDING = [
- [16, 16, 16, 16,
- 16, 16, 16, 16,
- 16, 16, 16, 16,
- 16, 16, 16, 16],
-
- [15, 15, 15, 15,
- 15, 15, 15, 15,
- 15, 15, 15, 15,
- 15, 15, 15],
-
- [14, 14, 14, 14,
- 14, 14, 14, 14,
- 14, 14, 14, 14,
- 14, 14],
-
- [13, 13, 13, 13,
- 13, 13, 13, 13,
- 13, 13, 13, 13,
- 13],
-
- [12, 12, 12, 12,
- 12, 12, 12, 12,
- 12, 12, 12, 12],
-
- [11, 11, 11, 11,
- 11, 11, 11, 11,
- 11, 11, 11],
-
- [10, 10, 10, 10,
- 10, 10, 10, 10,
- 10, 10],
-
- [9, 9, 9, 9,
- 9, 9, 9, 9,
- 9],
-
- [8, 8, 8, 8,
- 8, 8, 8, 8],
-
- [7, 7, 7, 7,
- 7, 7, 7],
-
- [6, 6, 6, 6,
- 6, 6],
-
- [5, 5, 5, 5,
- 5],
-
- [4, 4, 4, 4],
-
- [3, 3, 3],
-
- [2, 2],
-
- [1]
-];
-
-},{}],18:[function(require,module,exports){
-/*
- * pkcs7
- * https://github.com/brightcove/pkcs7
- *
- * Copyright (c) 2014 Brightcove
- * Licensed under the apache2 license.
- */
-
-'use strict';
-
-exports.pad = require('./pad.js');
-exports.unpad = require('./unpad.js');
-
-},{"./pad.js":17,"./unpad.js":19}],19:[function(require,module,exports){
-/*
- * pkcs7.unpad
- * https://github.com/brightcove/pkcs7
- *
- * Copyright (c) 2014 Brightcove
- * Licensed under the apache2 license.
- */
-
-'use strict';
-
-/**
- * Returns the subarray of a Uint8Array without PKCS#7 padding.
- * @param padded {Uint8Array} unencrypted bytes that have been padded
- * @return {Uint8Array} the unpadded bytes
- * @see http://tools.ietf.org/html/rfc5652
- */
-module.exports = function unpad(padded) {
- return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);
-};
-
-},{}],20:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var deprecateOldCue = function deprecateOldCue(cue) {
- Object.defineProperties(cue.frame, {
- id: {
- get: function get() {
- _videoJs2['default'].log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');
- return cue.value.key;
- }
- },
- value: {
- get: function get() {
- _videoJs2['default'].log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');
- return cue.value.data;
- }
- },
- privateData: {
- get: function get() {
- _videoJs2['default'].log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');
- return cue.value.data;
- }
- }
- });
-};
-
-var addTextTrackData = function addTextTrackData(sourceHandler, captionArray, metadataArray) {
- var Cue = window.WebKitDataCue || window.VTTCue;
-
- if (captionArray) {
- captionArray.forEach(function (caption) {
- this.inbandTextTrack_.addCue(new Cue(caption.startTime + this.timestampOffset, caption.endTime + this.timestampOffset, caption.text));
- }, sourceHandler);
- }
-
- if (metadataArray) {
- metadataArray.forEach(function (metadata) {
- var time = metadata.cueTime + this.timestampOffset;
-
- metadata.frames.forEach(function (frame) {
- var cue = new Cue(time, time, frame.value || frame.url || frame.data || '');
-
- cue.frame = frame;
- cue.value = frame;
- deprecateOldCue(cue);
- this.metadataTrack_.addCue(cue);
- }, this);
- }, sourceHandler);
- }
-};
-
-exports['default'] = addTextTrackData;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],21:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-var createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) {
- // create an in-band caption track if one is present in the segment
- if (segment.captions && segment.captions.length && !sourceBuffer.inbandTextTrack_) {
- sourceBuffer.inbandTextTrack_ = mediaSource.player_.addTextTrack('captions', 'cc1');
- }
-
- if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) {
- sourceBuffer.metadataTrack_ = mediaSource.player_.addTextTrack('metadata', 'Timed Metadata');
- sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType;
- }
-};
-
-exports['default'] = createTextTracksIfNecessary;
-module.exports = exports['default'];
-},{}],22:[function(require,module,exports){
-/**
- * The maximum size in bytes for append operations to the video.js
- * SWF. Calling through to Flash blocks and can be expensive so
- * tuning this parameter may improve playback on slower
- * systems. There are two factors to consider:
- * - Each interaction with the SWF must be quick or you risk dropping
- * video frames. To maintain 60fps for the rest of the page, each append
- * must not take longer than 16ms. Given the likelihood that the page
- * will be executing more javascript than just playback, you probably
- * want to aim for less than 8ms. We aim for just 4ms.
- * - Bigger appends significantly increase throughput. The total number of
- * bytes over time delivered to the SWF must exceed the video bitrate or
- * playback will stall.
- *
- * We adaptively tune the size of appends to give the best throughput
- * possible given the performance of the system. To do that we try to append
- * as much as possible in TIME_PER_TICK and while tuning the size of appends
- * dynamically so that we only append about 4-times in that 4ms span.
- *
- * The reason we try to keep the number of appends around four is due to
- * externalities such as Flash load and garbage collection that are highly
- * variable and having 4 iterations allows us to exit the loop early if
- * an iteration takes longer than expected.
- */
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-var flashConstants = {
- TIME_BETWEEN_TICKS: Math.floor(1000 / 480),
- TIME_PER_TICK: Math.floor(1000 / 240),
- // 1kb
- BYTES_PER_CHUNK: 1 * 1024,
- MIN_CHUNK: 1024,
- MAX_CHUNK: 1024 * 1024
-};
-
-exports["default"] = flashConstants;
-module.exports = exports["default"];
-},{}],23:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var _flashSourceBuffer = require('./flash-source-buffer');
-
-var _flashSourceBuffer2 = _interopRequireDefault(_flashSourceBuffer);
-
-var _flashConstants = require('./flash-constants');
-
-var _flashConstants2 = _interopRequireDefault(_flashConstants);
-
-var FlashMediaSource = (function (_videojs$EventTarget) {
- _inherits(FlashMediaSource, _videojs$EventTarget);
-
- function FlashMediaSource() {
- var _this = this;
-
- _classCallCheck(this, FlashMediaSource);
-
- _get(Object.getPrototypeOf(FlashMediaSource.prototype), 'constructor', this).call(this);
- this.sourceBuffers = [];
- this.readyState = 'closed';
-
- this.on(['sourceopen', 'webkitsourceopen'], function (event) {
- // find the swf where we will push media data
- _this.swfObj = document.getElementById(event.swfId);
- _this.player_ = (0, _videoJs2['default'])(_this.swfObj.parentNode);
- _this.tech_ = _this.swfObj.tech;
- _this.readyState = 'open';
-
- _this.tech_.on('seeking', function () {
- var i = _this.sourceBuffers.length;
-
- while (i--) {
- _this.sourceBuffers[i].abort();
- }
- });
-
- // trigger load events
- if (_this.swfObj) {
- _this.swfObj.vjs_load();
- }
- });
- }
-
- /**
- * Set or return the presentation duration.
- * @param value {double} the duration of the media in seconds
- * @param {double} the current presentation duration
- * @see http://www.w3.org/TR/media-source/#widl-MediaSource-duration
- */
-
- _createClass(FlashMediaSource, [{
- key: 'addSeekableRange_',
- value: function addSeekableRange_() {}
- // intentional no-op
-
- // create a new source buffer to receive a type of media data
-
- }, {
- key: 'addSourceBuffer',
- value: function addSourceBuffer(type) {
- var sourceBuffer = undefined;
-
- // if this is an FLV type, we'll push data to flash
- if (type.indexOf('video/mp2t') === 0) {
- // Flash source buffers
- sourceBuffer = new _flashSourceBuffer2['default'](this);
- } else {
- throw new Error('NotSupportedError (Video.js)');
- }
-
- this.sourceBuffers.push(sourceBuffer);
- return sourceBuffer;
- }
-
- /* eslint-disable max-len */
- /**
- * Signals the end of the stream.
- * @param error {string} (optional) Signals that a playback error
- * has occurred. If specified, it must be either "network" or
- * "decode".
- * @see https://w3c.github.io/media-source/#widl-MediaSource-endOfStream-void-EndOfStreamError-error
- */
- /* eslint-enable max-len */
- }, {
- key: 'endOfStream',
- value: function endOfStream(error) {
- if (error === 'network') {
- // MEDIA_ERR_NETWORK
- this.tech_.error(2);
- } else if (error === 'decode') {
- // MEDIA_ERR_DECODE
- this.tech_.error(3);
- }
- if (this.readyState !== 'ended') {
- this.readyState = 'ended';
- this.swfObj.vjs_endOfStream();
- }
- }
- }]);
-
- return FlashMediaSource;
-})(_videoJs2['default'].EventTarget);
-
-exports['default'] = FlashMediaSource;
-try {
- Object.defineProperty(FlashMediaSource.prototype, 'duration', {
- get: function get() {
- if (!this.swfObj) {
- return NaN;
- }
- // get the current duration from the SWF
- return this.swfObj.vjs_getProperty('duration');
- },
- set: function set(value) {
- var i = undefined;
- var oldDuration = this.swfObj.vjs_getProperty('duration');
-
- this.swfObj.vjs_setProperty('duration', value);
-
- if (value < oldDuration) {
- // In MSE, this triggers the range removal algorithm which causes
- // an update to occur
- for (i = 0; i < this.sourceBuffers.length; i++) {
- this.sourceBuffers[i].remove(value, oldDuration);
- }
- }
-
- return value;
- }
- });
-} catch (e) {
- // IE8 throws if defineProperty is called on a non-DOM node. We
- // don't support IE8 but we shouldn't throw an error if loaded
- // there.
- FlashMediaSource.prototype.duration = NaN;
-}
-
-for (var property in _flashConstants2['default']) {
- FlashMediaSource[property] = _flashConstants2['default'][property];
-}
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./flash-constants":22,"./flash-source-buffer":24}],24:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var _muxJs = require('mux.js');
-
-var _muxJs2 = _interopRequireDefault(_muxJs);
-
-var _removeCuesFromTrack = require('./remove-cues-from-track');
-
-var _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);
-
-var _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');
-
-var _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);
-
-var _addTextTrackData = require('./add-text-track-data');
-
-var _addTextTrackData2 = _interopRequireDefault(_addTextTrackData);
-
-var _flashConstants = require('./flash-constants');
-
-var _flashConstants2 = _interopRequireDefault(_flashConstants);
-
-var scheduleTick = function scheduleTick(func) {
- // Chrome doesn't invoke requestAnimationFrame callbacks
- // in background tabs, so use setTimeout.
- window.setTimeout(func, _flashConstants2['default'].TIME_BETWEEN_TICKS);
-};
-
-// Source Buffer
-
-var FlashSourceBuffer = (function (_videojs$EventTarget) {
- _inherits(FlashSourceBuffer, _videojs$EventTarget);
-
- function FlashSourceBuffer(mediaSource) {
- var _this = this;
-
- _classCallCheck(this, FlashSourceBuffer);
-
- _get(Object.getPrototypeOf(FlashSourceBuffer.prototype), 'constructor', this).call(this);
- var encodedHeader = undefined;
-
- // Start off using the globally defined value but refine
- // as we append data into flash
- this.chunkSize_ = _flashConstants2['default'].BYTES_PER_CHUNK;
-
- // byte arrays queued to be appended
- this.buffer_ = [];
-
- // the total number of queued bytes
- this.bufferSize_ = 0;
-
- // to be able to determine the correct position to seek to, we
- // need to retain information about the mapping between the
- // media timeline and PTS values
- this.basePtsOffset_ = NaN;
-
- this.mediaSource = mediaSource;
-
- // indicates whether the asynchronous continuation of an operation
- // is still being processed
- // see https://w3c.github.io/media-source/#widl-SourceBuffer-updating
- this.updating = false;
- this.timestampOffset_ = 0;
-
- // TS to FLV transmuxer
- this.segmentParser_ = new _muxJs2['default'].flv.Transmuxer();
- this.segmentParser_.on('data', this.receiveBuffer_.bind(this));
- encodedHeader = window.btoa(String.fromCharCode.apply(null, Array.prototype.slice.call(this.segmentParser_.getFlvHeader())));
- this.mediaSource.swfObj.vjs_appendBuffer(encodedHeader);
-
- Object.defineProperty(this, 'timestampOffset', {
- get: function get() {
- return this.timestampOffset_;
- },
- set: function set(val) {
- if (typeof val === 'number' && val >= 0) {
- this.timestampOffset_ = val;
- this.segmentParser_ = new _muxJs2['default'].flv.Transmuxer();
- this.segmentParser_.on('data', this.receiveBuffer_.bind(this));
- // We have to tell flash to expect a discontinuity
- this.mediaSource.swfObj.vjs_discontinuity();
- // the media <-> PTS mapping must be re-established after
- // the discontinuity
- this.basePtsOffset_ = NaN;
- }
- }
- });
-
- Object.defineProperty(this, 'buffered', {
- get: function get() {
- return _videoJs2['default'].createTimeRanges(this.mediaSource.swfObj.vjs_getProperty('buffered'));
- }
- });
-
- // On a seek we remove all text track data since flash has no concept
- // of a buffered-range and everything else is reset on seek
- this.mediaSource.player_.on('seeked', function () {
- (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.metadataTrack_);
- (0, _removeCuesFromTrack2['default'])(0, Infinity, _this.inbandTextTrack_);
- });
- }
-
- // accept video data and pass to the video (swf) object
-
- _createClass(FlashSourceBuffer, [{
- key: 'appendBuffer',
- value: function appendBuffer(bytes) {
- var _this2 = this;
-
- var error = undefined;
- var chunk = 512 * 1024;
- var i = 0;
-
- if (this.updating) {
- error = new Error('SourceBuffer.append() cannot be called ' + 'while an update is in progress');
- error.name = 'InvalidStateError';
- error.code = 11;
- throw error;
- }
-
- this.updating = true;
- this.mediaSource.readyState = 'open';
- this.trigger({ type: 'update' });
-
- // this is here to use recursion
- var chunkInData = function chunkInData() {
- _this2.segmentParser_.push(bytes.subarray(i, i + chunk));
- i += chunk;
- if (i < bytes.byteLength) {
- scheduleTick(chunkInData);
- } else {
- scheduleTick(_this2.segmentParser_.flush.bind(_this2.segmentParser_));
- }
- };
-
- chunkInData();
- }
-
- // reset the parser and remove any data queued to be sent to the swf
- }, {
- key: 'abort',
- value: function abort() {
- this.buffer_ = [];
- this.bufferSize_ = 0;
- this.mediaSource.swfObj.vjs_abort();
-
- // report any outstanding updates have ended
- if (this.updating) {
- this.updating = false;
- this.trigger({ type: 'updateend' });
- }
- }
-
- // Flash cannot remove ranges already buffered in the NetStream
- // but seeking clears the buffer entirely. For most purposes,
- // having this operation act as a no-op is acceptable.
- }, {
- key: 'remove',
- value: function remove(start, end) {
- (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);
- (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTrack_);
- this.trigger({ type: 'update' });
- this.trigger({ type: 'updateend' });
- }
- }, {
- key: 'receiveBuffer_',
- value: function receiveBuffer_(segment) {
- var _this3 = this;
-
- // create an in-band caption track if one is present in the segment
- (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource, segment);
- (0, _addTextTrackData2['default'])(this, segment.captions, segment.metadata);
-
- // Do this asynchronously since convertTagsToData_ can be time consuming
- scheduleTick(function () {
- var flvBytes = _this3.convertTagsToData_(segment);
-
- if (_this3.buffer_.length === 0) {
- scheduleTick(_this3.processBuffer_.bind(_this3));
- }
-
- if (flvBytes) {
- _this3.buffer_.push(flvBytes);
- _this3.bufferSize_ += flvBytes.byteLength;
- }
- });
- }
-
- // append a portion of the current buffer to the SWF
- }, {
- key: 'processBuffer_',
- value: function processBuffer_() {
- var chunk = undefined;
- var i = undefined;
- var length = undefined;
- var binary = undefined;
- var b64str = undefined;
- var startByte = 0;
- var appendIterations = 0;
- var startTime = +new Date();
- var appendTime = undefined;
-
- if (!this.buffer_.length) {
- if (this.updating !== false) {
- this.updating = false;
- this.trigger({ type: 'updateend' });
- }
- // do nothing if the buffer is empty
- return;
- }
-
- do {
- appendIterations++;
- // concatenate appends up to the max append size
- chunk = this.buffer_[0].subarray(startByte, startByte + this.chunkSize_);
-
- // requeue any bytes that won't make it this round
- if (chunk.byteLength < this.chunkSize_ || this.buffer_[0].byteLength === startByte + this.chunkSize_) {
- startByte = 0;
- this.buffer_.shift();
- } else {
- startByte += this.chunkSize_;
- }
-
- this.bufferSize_ -= chunk.byteLength;
-
- // base64 encode the bytes
- binary = '';
- length = chunk.byteLength;
- for (i = 0; i < length; i++) {
- binary += String.fromCharCode(chunk[i]);
- }
- b64str = window.btoa(binary);
-
- // bypass normal ExternalInterface calls and pass xml directly
- // IE can be slow by default
- this.mediaSource.swfObj.CallFunction('<invoke name="vjs_appendBuffer"' + 'returntype="javascript"><arguments><string>' + b64str + '</string></arguments></invoke>');
- appendTime = new Date() - startTime;
- } while (this.buffer_.length && appendTime < _flashConstants2['default'].TIME_PER_TICK);
-
- if (this.buffer_.length && startByte) {
- this.buffer_[0] = this.buffer_[0].subarray(startByte);
- }
-
- if (appendTime >= _flashConstants2['default'].TIME_PER_TICK) {
- // We want to target 4 iterations per time-slot so that gives us
- // room to adjust to changes in Flash load and other externalities
- // such as garbage collection while still maximizing throughput
- this.chunkSize_ = Math.floor(this.chunkSize_ * (appendIterations / 4));
- }
-
- // We also make sure that the chunk-size doesn't drop below 1KB or
- // go above 1MB as a sanity check
- this.chunkSize_ = Math.max(_flashConstants2['default'].MIN_CHUNK, Math.min(this.chunkSize_, _flashConstants2['default'].MAX_CHUNK));
-
- // schedule another append if necessary
- if (this.bufferSize_ !== 0) {
- scheduleTick(this.processBuffer_.bind(this));
- } else {
- this.updating = false;
- this.trigger({ type: 'updateend' });
- }
- }
-
- // Turns an array of flv tags into a Uint8Array representing the
- // flv data. Also removes any tags that are before the current
- // time so that playback begins at or slightly after the right
- // place on a seek
- }, {
- key: 'convertTagsToData_',
- value: function convertTagsToData_(segmentData) {
- var segmentByteLength = 0;
- var tech = this.mediaSource.tech_;
- var targetPts = 0;
- var i = undefined;
- var j = undefined;
- var segment = undefined;
- var filteredTags = [];
- var tags = this.getOrderedTags_(segmentData);
-
- // Establish the media timeline to PTS translation if we don't
- // have one already
- if (isNaN(this.basePtsOffset_) && tags.length) {
- this.basePtsOffset_ = tags[0].pts;
- }
-
- // Trim any tags that are before the end of the end of
- // the current buffer
- if (tech.buffered().length) {
- targetPts = tech.buffered().end(0) - this.timestampOffset;
- }
- // Trim to currentTime if it's ahead of buffered or buffered doesn't exist
- targetPts = Math.max(targetPts, tech.currentTime() - this.timestampOffset);
-
- // PTS values are represented in milliseconds
- targetPts *= 1e3;
- targetPts += this.basePtsOffset_;
-
- // skip tags with a presentation time less than the seek target
- for (i = 0; i < tags.length; i++) {
- if (tags[i].pts >= targetPts) {
- filteredTags.push(tags[i]);
- }
- }
-
- if (filteredTags.length === 0) {
- return;
- }
-
- // concatenate the bytes into a single segment
- for (i = 0; i < filteredTags.length; i++) {
- segmentByteLength += filteredTags[i].bytes.byteLength;
- }
- segment = new Uint8Array(segmentByteLength);
- for (i = 0, j = 0; i < filteredTags.length; i++) {
- segment.set(filteredTags[i].bytes, j);
- j += filteredTags[i].bytes.byteLength;
- }
-
- return segment;
- }
-
- // assemble the FLV tags in decoder order
- }, {
- key: 'getOrderedTags_',
- value: function getOrderedTags_(segmentData) {
- var videoTags = segmentData.tags.videoTags;
- var audioTags = segmentData.tags.audioTags;
- var tag = undefined;
- var tags = [];
-
- while (videoTags.length || audioTags.length) {
- if (!videoTags.length) {
- // only audio tags remain
- tag = audioTags.shift();
- } else if (!audioTags.length) {
- // only video tags remain
- tag = videoTags.shift();
- } else if (audioTags[0].dts < videoTags[0].dts) {
- // audio should be decoded next
- tag = audioTags.shift();
- } else {
- // video should be decoded next
- tag = videoTags.shift();
- }
-
- tags.push(tag.finalize());
- }
-
- return tags;
- }
- }]);
-
- return FlashSourceBuffer;
-})(_videoJs2['default'].EventTarget);
-
-exports['default'] = FlashSourceBuffer;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./add-text-track-data":20,"./create-text-tracks-if-necessary":21,"./flash-constants":22,"./remove-cues-from-track":26,"mux.js":37}],25:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var _virtualSourceBuffer = require('./virtual-source-buffer');
-
-var _virtualSourceBuffer2 = _interopRequireDefault(_virtualSourceBuffer);
-
-// Replace the old apple-style `avc1.<dd>.<dd>` codec string with the standard
-// `avc1.<hhhhhh>`
-var translateLegacyCodecs = function translateLegacyCodecs(codecs) {
- return codecs.replace(/avc1\.(\d+)\.(\d+)/i, function (orig, profile, avcLevel) {
- var profileHex = ('00' + Number(profile).toString(16)).slice(-2);
- var avcLevelHex = ('00' + Number(avcLevel).toString(16)).slice(-2);
-
- return 'avc1.' + profileHex + '00' + avcLevelHex;
- });
-};
-
-var HtmlMediaSource = (function (_videojs$EventTarget) {
- _inherits(HtmlMediaSource, _videojs$EventTarget);
-
- function HtmlMediaSource() {
- _classCallCheck(this, HtmlMediaSource);
-
- _get(Object.getPrototypeOf(HtmlMediaSource.prototype), 'constructor', this).call(this, _videoJs2['default'].EventTarget);
- /* eslint-disable consistent-this */
- var self = this;
- /* eslint-enable consistent-this */
- var property = undefined;
-
- this.mediaSource_ = new window.MediaSource();
- // delegate to the native MediaSource's methods by default
- for (property in this.mediaSource_) {
- if (!(property in HtmlMediaSource.prototype) && typeof this.mediaSource_[property] === 'function') {
- this[property] = this.mediaSource_[property].bind(this.mediaSource_);
- }
- }
-
- // emulate `duration` and `seekable` until seeking can be
- // handled uniformly for live streams
- // see https://github.com/w3c/media-source/issues/5
- this.duration_ = NaN;
- Object.defineProperty(this, 'duration', {
- get: function get() {
- if (self.duration_ === Infinity) {
- return self.duration_;
- }
- return self.mediaSource_.duration;
- },
- set: function set(duration) {
- self.duration_ = duration;
- if (duration !== Infinity) {
- self.mediaSource_.duration = duration;
- return;
- }
- }
- });
- Object.defineProperty(this, 'seekable', {
- get: function get() {
- if (this.duration_ === Infinity) {
- return _videoJs2['default'].createTimeRanges([[0, self.mediaSource_.duration]]);
- }
- return self.mediaSource_.seekable;
- }
- });
-
- Object.defineProperty(this, 'readyState', {
- get: function get() {
- return self.mediaSource_.readyState;
- }
- });
-
- // the list of virtual and native SourceBuffers created by this
- // MediaSource
- this.sourceBuffers = [];
-
- // Re-emit MediaSource events on the polyfill
- ['sourceopen', 'sourceclose', 'sourceended'].forEach(function (eventName) {
- this.mediaSource_.addEventListener(eventName, this.trigger.bind(this));
- }, this);
-
- // capture the associated player when the MediaSource is
- // successfully attached
- this.on('sourceopen', function (event) {
- var video = document.querySelector('[src="' + self.url_ + '"]');
-
- if (!video) {
- return;
- }
-
- self.player_ = (0, _videoJs2['default'])(video.parentNode);
- });
-
- // explicitly terminate any WebWorkers that were created
- // by SourceHandlers
- this.on('sourceclose', function (event) {
- this.sourceBuffers.forEach(function (sourceBuffer) {
- if (sourceBuffer.transmuxer_) {
- sourceBuffer.transmuxer_.terminate();
- }
- });
-
- this.sourceBuffers.length = 0;
- });
- }
-
- _createClass(HtmlMediaSource, [{
- key: 'addSeekableRange_',
- value: function addSeekableRange_(start, end) {
- var error = undefined;
-
- if (this.duration !== Infinity) {
- error = new Error('MediaSource.addSeekableRange() can only be invoked ' + 'when the duration is Infinity');
- error.name = 'InvalidStateError';
- error.code = 11;
- throw error;
- }
-
- if (end > this.mediaSource_.duration || isNaN(this.mediaSource_.duration)) {
- this.mediaSource_.duration = end;
- }
- }
- }, {
- key: 'addSourceBuffer',
- value: function addSourceBuffer(type) {
- var buffer = undefined;
- var codecs = undefined;
- var avcCodec = undefined;
- var mp4aCodec = undefined;
- var avcRegEx = /avc1\.[\da-f]+/i;
- var mp4aRegEx = /mp4a\.\d+.\d+/i;
-
- // create a virtual source buffer to transmux MPEG-2 transport
- // stream segments into fragmented MP4s
- if (/^video\/mp2t/i.test(type)) {
- codecs = type.split(';').slice(1).join(';');
- codecs = translateLegacyCodecs(codecs);
-
- // Pull out each individual codec string if it exists
- avcCodec = (codecs.match(avcRegEx) || [])[0];
- mp4aCodec = (codecs.match(mp4aRegEx) || [])[0];
-
- // If a codec is unspecified, use the defaults
- if (!avcCodec || !avcCodec.length) {
- avcCodec = 'avc1.4d400d';
- }
- if (!mp4aCodec || !mp4aCodec.length) {
- mp4aCodec = 'mp4a.40.2';
- }
-
- buffer = new _virtualSourceBuffer2['default'](this, [avcCodec, mp4aCodec]);
- this.sourceBuffers.push(buffer);
- return buffer;
- }
-
- // delegate to the native implementation
- buffer = this.mediaSource_.addSourceBuffer(type);
- this.sourceBuffers.push(buffer);
- return buffer;
- }
- }]);
-
- return HtmlMediaSource;
-})(_videoJs2['default'].EventTarget);
-
-exports['default'] = HtmlMediaSource;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./virtual-source-buffer":29}],26:[function(require,module,exports){
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-var removeCuesFromTrack = function removeCuesFromTrack(start, end, track) {
- var i = undefined;
- var cue = undefined;
-
- if (!track) {
- return;
- }
-
- i = track.cues.length;
-
- while (i--) {
- cue = track.cues[i];
-
- // Remove any overlapping cue
- if (cue.startTime <= end && cue.endTime >= start) {
- track.removeCue(cue);
- }
- }
-};
-
-exports["default"] = removeCuesFromTrack;
-module.exports = exports["default"];
-},{}],27:[function(require,module,exports){
-/**
- * videojs-contrib-media-sources
- *
- * Copyright (c) 2015 Brightcove
- * All rights reserved.
- *
- * Handles communication between the browser-world and the mux.js
- * transmuxer running inside of a WebWorker by exposing a simple
- * message-based interface to a Transmuxer object.
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _muxJs = require('mux.js');
-
-var _muxJs2 = _interopRequireDefault(_muxJs);
-
-var globalTransmuxer = undefined;
-var initOptions = {};
-
-/**
- * wireTransmuxerEvents
- * Re-emits tranmsuxer events by converting them into messages to the
- * world outside the worker
- */
-var wireTransmuxerEvents = function wireTransmuxerEvents(transmuxer) {
- transmuxer.on('data', function (segment) {
- // transfer ownership of the underlying ArrayBuffer
- // instead of doing a copy to save memory
- // ArrayBuffers are transferable but generic TypedArrays are not
- /* eslint-disable max-len */
- // see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)
- /* eslint-enable max-len */
- var typedArray = segment.data;
-
- segment.data = typedArray.buffer;
- postMessage({
- action: 'data',
- segment: segment,
- byteOffset: typedArray.byteOffset,
- byteLength: typedArray.byteLength
- }, [segment.data]);
- });
-
- if (transmuxer.captionStream) {
- transmuxer.captionStream.on('data', function (caption) {
- postMessage({
- action: 'caption',
- data: caption
- });
- });
- }
-
- transmuxer.on('done', function (data) {
- postMessage({ action: 'done' });
- });
-};
-
-/**
- * All incoming messages route through this hash. If no function exists
- * to handle an incoming message, then we ignore the message.
- */
-var messageHandlers = {
- /**
- * init
- * Allows you to initialize the transmuxer and pass along options from
- * outside the worker
- */
- init: function init(data) {
- initOptions = data && data.options || {};
- this.defaultInit();
- },
- /**
- * defaultInit
- * Is called before every function and initializes the transmuxer with
- * default options if `init` was never explicitly called
- */
- defaultInit: function defaultInit() {
- if (globalTransmuxer) {
- globalTransmuxer.dispose();
- }
- globalTransmuxer = new _muxJs2['default'].mp4.Transmuxer(initOptions);
- wireTransmuxerEvents(globalTransmuxer);
- },
- /**
- * push
- * Adds data (a ts segment) to the start of the transmuxer pipeline for
- * processing
- */
- push: function push(data) {
- // Cast array buffer to correct type for transmuxer
- var segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);
-
- globalTransmuxer.push(segment);
- },
- /**
- * reset
- * Recreate the transmuxer so that the next segment added via `push`
- * start with a fresh transmuxer
- */
- reset: function reset() {
- this.defaultInit();
- },
- /**
- * setTimestampOffset
- * Set the value that will be used as the `baseMediaDecodeTime` time for the
- * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`
- * set relative to the first based on the PTS values.
- */
- setTimestampOffset: function setTimestampOffset(data) {
- var timestampOffset = data.timestampOffset || 0;
-
- globalTransmuxer.setBaseMediaDecodeTime(Math.round(timestampOffset * 90000));
- },
- /**
- * flush
- * Forces the pipeline to finish processing the last segment and emit it's
- * results
- */
- flush: function flush(data) {
- globalTransmuxer.flush();
- }
-};
-
-var Worker = function Worker(self) {
- self.onmessage = function (event) {
- // Setup the default transmuxer if one doesn't exist yet and we are invoked with
- // an action other than `init`
- if (!globalTransmuxer && event.data.action !== 'init') {
- messageHandlers.defaultInit();
- }
-
- if (event.data && event.data.action) {
- if (messageHandlers[event.data.action]) {
- messageHandlers[event.data.action](event.data);
- }
- }
- };
-};
-
-exports['default'] = Worker;
-module.exports = exports['default'];
-},{"mux.js":37}],28:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _flashMediaSource = require('./flash-media-source');
-
-var _flashMediaSource2 = _interopRequireDefault(_flashMediaSource);
-
-var _htmlMediaSource = require('./html-media-source');
-
-var _htmlMediaSource2 = _interopRequireDefault(_htmlMediaSource);
-
-// import videojs from 'video.js';
-var videojs = window.videojs;
-var urlCount = 0;
-
-// ------------
-// Media Source
-// ------------
-
-var defaults = {
- // how to determine the MediaSource implementation to use. There
- // are three available modes:
- // - auto: use native MediaSources where available and Flash
- // everywhere else
- // - html5: always use native MediaSources
- // - flash: always use the Flash MediaSource polyfill
- mode: 'auto'
-};
-
-// store references to the media sources so they can be connected
-// to a video element (a swf object)
-videojs.mediaSources = {};
-
-// provide a method for a swf object to notify JS that a media source is now open
-var open = function open(msObjectURL, swfId) {
- var mediaSource = videojs.mediaSources[msObjectURL];
-
- if (mediaSource) {
- mediaSource.trigger({ type: 'sourceopen', swfId: swfId });
- } else {
- throw new Error('Media Source not found (Video.js)');
- }
-};
-
-// Check to see if the native MediaSource object exists and supports
-// an MP4 container with both H.264 video and AAC-LC audio
-var supportsNativeMediaSources = function supportsNativeMediaSources() {
- return !!window.MediaSource && window.MediaSource.isTypeSupported('video/mp4;codecs="avc1.4d400d,mp4a.40.2"');
-};
-
-var MediaSource = function MediaSource(options) {
- var settings = videojs.mergeOptions(defaults, options);
-
- this.MediaSource = {
- open: open,
- supportsNativeMediaSources: supportsNativeMediaSources
- };
-
- // determine whether HTML MediaSources should be used
- if (settings.mode === 'html5' || settings.mode === 'auto' && supportsNativeMediaSources()) {
- return new _htmlMediaSource2['default']();
- }
-
- // otherwise, emulate them through the SWF
- return new _flashMediaSource2['default']();
-};
-
-exports.MediaSource = MediaSource;
-MediaSource.open = open;
-MediaSource.supportsNativeMediaSources = supportsNativeMediaSources;
-
-var URL = {
- createObjectURL: function createObjectURL(object) {
- var objectUrlPrefix = 'blob:vjs-media-source/';
- var url = undefined;
-
- // use the native MediaSource to generate an object URL
- if (object instanceof _htmlMediaSource2['default']) {
- url = window.URL.createObjectURL(object.mediaSource_);
- object.url_ = url;
- return url;
- }
- // if the object isn't an emulated MediaSource, delegate to the
- // native implementation
- if (!(object instanceof _flashMediaSource2['default'])) {
- url = window.URL.createObjectURL(object);
- object.url_ = url;
- return url;
- }
-
- // build a URL that can be used to map back to the emulated
- // MediaSource
- url = objectUrlPrefix + urlCount;
-
- urlCount++;
-
- // setup the mapping back to object
- videojs.mediaSources[url] = object;
-
- return url;
- }
-};
-
-exports.URL = URL;
-videojs.MediaSource = MediaSource;
-videojs.URL = URL;
-},{"./flash-media-source":23,"./html-media-source":25}],29:[function(require,module,exports){
-(function (global){
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var _createTextTracksIfNecessary = require('./create-text-tracks-if-necessary');
-
-var _createTextTracksIfNecessary2 = _interopRequireDefault(_createTextTracksIfNecessary);
-
-var _removeCuesFromTrack = require('./remove-cues-from-track');
-
-var _removeCuesFromTrack2 = _interopRequireDefault(_removeCuesFromTrack);
-
-var _addTextTrackData = require('./add-text-track-data');
-
-var _addTextTrackData2 = _interopRequireDefault(_addTextTrackData);
-
-var _webworkify = require('webworkify');
-
-var _webworkify2 = _interopRequireDefault(_webworkify);
-
-var _transmuxerWorker = require('./transmuxer-worker');
-
-var _transmuxerWorker2 = _interopRequireDefault(_transmuxerWorker);
-
-var aggregateUpdateHandler = function aggregateUpdateHandler(mediaSource, guardBufferName, type) {
- return function () {
- if (!mediaSource[guardBufferName] || !mediaSource[guardBufferName].updating) {
- return mediaSource.trigger(type);
- }
- };
-};
-
-var VirtualSourceBuffer = (function (_videojs$EventTarget) {
- _inherits(VirtualSourceBuffer, _videojs$EventTarget);
-
- function VirtualSourceBuffer(mediaSource, codecs) {
- var _this = this;
-
- _classCallCheck(this, VirtualSourceBuffer);
-
- _get(Object.getPrototypeOf(VirtualSourceBuffer.prototype), 'constructor', this).call(this, _videoJs2['default'].EventTarget);
- this.timestampOffset_ = 0;
- this.pendingBuffers_ = [];
- this.bufferUpdating_ = false;
- this.mediaSource_ = mediaSource;
- this.codecs_ = codecs;
-
- // append muxed segments to their respective native buffers as
- // soon as they are available
- this.transmuxer_ = (0, _webworkify2['default'])(_transmuxerWorker2['default']);
- this.transmuxer_.postMessage({ action: 'init', options: { remux: false } });
-
- this.transmuxer_.onmessage = function (event) {
- if (event.data.action === 'data') {
- return _this.data_(event);
- }
-
- if (event.data.action === 'done') {
- return _this.done_(event);
- }
- };
-
- // this timestampOffset is a property with the side-effect of resetting
- // baseMediaDecodeTime in the transmuxer on the setter
- Object.defineProperty(this, 'timestampOffset', {
- get: function get() {
- return this.timestampOffset_;
- },
- set: function set(val) {
- if (typeof val === 'number' && val >= 0) {
- this.timestampOffset_ = val;
-
- // We have to tell the transmuxer to set the baseMediaDecodeTime to
- // the desired timestampOffset for the next segment
- this.transmuxer_.postMessage({
- action: 'setTimestampOffset',
- timestampOffset: val
- });
- }
- }
- });
- // setting the append window affects both source buffers
- Object.defineProperty(this, 'appendWindowStart', {
- get: function get() {
- return (this.videoBuffer_ || this.audioBuffer_).appendWindowStart;
- },
- set: function set(start) {
- if (this.videoBuffer_) {
- this.videoBuffer_.appendWindowStart = start;
- }
- if (this.audioBuffer_) {
- this.audioBuffer_.appendWindowStart = start;
- }
- }
- });
- // this buffer is "updating" if either of its native buffers are
- Object.defineProperty(this, 'updating', {
- get: function get() {
- return this.bufferUpdating_ || this.audioBuffer_ && this.audioBuffer_.updating || this.videoBuffer_ && this.videoBuffer_.updating;
- }
- });
- // the buffered property is the intersection of the buffered
- // ranges of the native source buffers
- Object.defineProperty(this, 'buffered', {
- get: function get() {
- var start = null;
- var end = null;
- var arity = 0;
- var extents = [];
- var ranges = [];
-
- // Handle the case where there is no buffer data
- if ((!this.videoBuffer_ || this.videoBuffer_.buffered.length === 0) && (!this.audioBuffer_ || this.audioBuffer_.buffered.length === 0)) {
- return _videoJs2['default'].createTimeRange();
- }
-
- // Handle the case where we only have one buffer
- if (!this.videoBuffer_) {
- return this.audioBuffer_.buffered;
- } else if (!this.audioBuffer_) {
- return this.videoBuffer_.buffered;
- }
-
- // Handle the case where we have both buffers and create an
- // intersection of the two
- var videoBuffered = this.videoBuffer_.buffered;
- var audioBuffered = this.audioBuffer_.buffered;
- var count = videoBuffered.length;
-
- // A) Gather up all start and end times
- while (count--) {
- extents.push({ time: videoBuffered.start(count), type: 'start' });
- extents.push({ time: videoBuffered.end(count), type: 'end' });
- }
- count = audioBuffered.length;
- while (count--) {
- extents.push({ time: audioBuffered.start(count), type: 'start' });
- extents.push({ time: audioBuffered.end(count), type: 'end' });
- }
- // B) Sort them by time
- extents.sort(function (a, b) {
- return a.time - b.time;
- });
-
- // C) Go along one by one incrementing arity for start and decrementing
- // arity for ends
- for (count = 0; count < extents.length; count++) {
- if (extents[count].type === 'start') {
- arity++;
-
- // D) If arity is ever incremented to 2 we are entering an
- // overlapping range
- if (arity === 2) {
- start = extents[count].time;
- }
- } else if (extents[count].type === 'end') {
- arity--;
-
- // E) If arity is ever decremented to 1 we leaving an
- // overlapping range
- if (arity === 1) {
- end = extents[count].time;
- }
- }
-
- // F) Record overlapping ranges
- if (start !== null && end !== null) {
- ranges.push([start, end]);
- start = null;
- end = null;
- }
- }
-
- return _videoJs2['default'].createTimeRanges(ranges);
- }
- });
- }
-
- // Transmuxer message handlers
-
- _createClass(VirtualSourceBuffer, [{
- key: 'data_',
- value: function data_(event) {
- var segment = event.data.segment;
- var nativeMediaSource = this.mediaSource_.mediaSource_;
-
- // Cast ArrayBuffer to TypedArray
- segment.data = new Uint8Array(segment.data, event.data.byteOffset, event.data.byteLength);
-
- // If any sourceBuffers have not been created, do so now
- if (segment.type === 'video') {
- if (!this.videoBuffer_) {
- this.videoBuffer_ = nativeMediaSource.addSourceBuffer('video/mp4;codecs="' + this.codecs_[0] + '"');
- // aggregate buffer events
- this.videoBuffer_.addEventListener('updatestart', aggregateUpdateHandler(this, 'audioBuffer_', 'updatestart'));
- this.videoBuffer_.addEventListener('update', aggregateUpdateHandler(this, 'audioBuffer_', 'update'));
- this.videoBuffer_.addEventListener('updateend', aggregateUpdateHandler(this, 'audioBuffer_', 'updateend'));
- }
- } else if (segment.type === 'audio') {
- if (!this.audioBuffer_) {
- this.audioBuffer_ = nativeMediaSource.addSourceBuffer('audio/mp4;codecs="' + this.codecs_[1] + '"');
- // aggregate buffer events
- this.audioBuffer_.addEventListener('updatestart', aggregateUpdateHandler(this, 'videoBuffer_', 'updatestart'));
- this.audioBuffer_.addEventListener('update', aggregateUpdateHandler(this, 'videoBuffer_', 'update'));
- this.audioBuffer_.addEventListener('updateend', aggregateUpdateHandler(this, 'videoBuffer_', 'updateend'));
- }
- } else if (segment.type === 'combined') {
- if (!this.videoBuffer_) {
- this.videoBuffer_ = nativeMediaSource.addSourceBuffer('video/mp4;codecs="' + this.codecs_.join(',') + '"');
- // aggregate buffer events
- this.videoBuffer_.addEventListener('updatestart', aggregateUpdateHandler(this, 'videoBuffer_', 'updatestart'));
- this.videoBuffer_.addEventListener('update', aggregateUpdateHandler(this, 'videoBuffer_', 'update'));
- this.videoBuffer_.addEventListener('updateend', aggregateUpdateHandler(this, 'videoBuffer_', 'updateend'));
- }
- }
- (0, _createTextTracksIfNecessary2['default'])(this, this.mediaSource_, segment);
-
- // Add the segments to the pendingBuffers array
- this.pendingBuffers_.push(segment);
- return;
- }
- }, {
- key: 'done_',
- value: function done_() {
- // All buffers should have been flushed from the muxer
- // start processing anything we have received
- this.processPendingSegments_();
- return;
- }
-
- // SourceBuffer Implementation
-
- }, {
- key: 'appendBuffer',
- value: function appendBuffer(segment) {
- // Start the internal "updating" state
- this.bufferUpdating_ = true;
-
- this.transmuxer_.postMessage({
- action: 'push',
- // Send the typed-array of data as an ArrayBuffer so that
- // it can be sent as a "Transferable" and avoid the costly
- // memory copy
- data: segment.buffer,
-
- // To recreate the original typed-array, we need information
- // about what portion of the ArrayBuffer it was a view into
- byteOffset: segment.byteOffset,
- byteLength: segment.byteLength
- }, [segment.buffer]);
- this.transmuxer_.postMessage({ action: 'flush' });
- }
- }, {
- key: 'remove',
- value: function remove(start, end) {
- if (this.videoBuffer_) {
- this.videoBuffer_.remove(start, end);
- }
- if (this.audioBuffer_) {
- this.audioBuffer_.remove(start, end);
- }
-
- // Remove Metadata Cues (id3)
- (0, _removeCuesFromTrack2['default'])(start, end, this.metadataTrack_);
-
- // Remove Any Captions
- (0, _removeCuesFromTrack2['default'])(start, end, this.inbandTextTrack_);
- }
-
- /**
- * Process any segments that the muxer has output
- * Concatenate segments together based on type and append them into
- * their respective sourceBuffers
- */
- }, {
- key: 'processPendingSegments_',
- value: function processPendingSegments_() {
- var sortedSegments = {
- video: {
- segments: [],
- bytes: 0
- },
- audio: {
- segments: [],
- bytes: 0
- },
- captions: [],
- metadata: []
- };
-
- // Sort segments into separate video/audio arrays and
- // keep track of their total byte lengths
- sortedSegments = this.pendingBuffers_.reduce(function (segmentObj, segment) {
- var type = segment.type;
- var data = segment.data;
-
- // A "combined" segment type (unified video/audio) uses the videoBuffer
- if (type === 'combined') {
- type = 'video';
- }
-
- segmentObj[type].segments.push(data);
- segmentObj[type].bytes += data.byteLength;
-
- // Gather any captions into a single array
- if (segment.captions) {
- segmentObj.captions = segmentObj.captions.concat(segment.captions);
- }
-
- // Gather any metadata into a single array
- if (segment.metadata) {
- segmentObj.metadata = segmentObj.metadata.concat(segment.metadata);
- }
-
- return segmentObj;
- }, sortedSegments);
-
- (0, _addTextTrackData2['default'])(this, sortedSegments.captions, sortedSegments.metadata);
-
- // Merge multiple video and audio segments into one and append
- this.concatAndAppendSegments_(sortedSegments.video, this.videoBuffer_);
- this.concatAndAppendSegments_(sortedSegments.audio, this.audioBuffer_);
-
- this.pendingBuffers_.length = 0;
-
- // We are no longer in the internal "updating" state
- this.bufferUpdating_ = false;
- }
-
- /**
- * Combind all segments into a single Uint8Array and then append them
- * to the destination buffer
- */
- }, {
- key: 'concatAndAppendSegments_',
- value: function concatAndAppendSegments_(segmentObj, destinationBuffer) {
- var offset = 0;
- var tempBuffer = undefined;
-
- if (segmentObj.bytes) {
- tempBuffer = new Uint8Array(segmentObj.bytes);
-
- // Combine the individual segments into one large typed-array
- segmentObj.segments.forEach(function (segment) {
- tempBuffer.set(segment, offset);
- offset += segment.byteLength;
- });
-
- destinationBuffer.appendBuffer(tempBuffer);
- }
- }
-
- // abort any sourceBuffer actions and throw out any un-appended data
- }, {
- key: 'abort',
- value: function abort() {
- if (this.videoBuffer_) {
- this.videoBuffer_.abort();
- }
- if (this.audioBuffer_) {
- this.audioBuffer_.abort();
- }
- if (this.transmuxer_) {
- this.transmuxer_.postMessage({ action: 'reset' });
- }
- this.pendingBuffers_.length = 0;
- this.bufferUpdating_ = false;
- }
- }]);
-
- return VirtualSourceBuffer;
-})(_videoJs2['default'].EventTarget);
-
-exports['default'] = VirtualSourceBuffer;
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./add-text-track-data":20,"./create-text-tracks-if-necessary":21,"./remove-cues-from-track":26,"./transmuxer-worker":27,"webworkify":50}],30:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2016 Brightcove
- * All rights reserved.
- *
- * A stream-based aac to mp4 converter. This utility can be used to
- * deliver mp4s to a SourceBuffer on platforms that support native
- * Media Source Extensions.
- */
-'use strict';
-var Stream = require('../utils/stream.js');
-
-// Constants
-var AacStream;
-
-/**
- * Splits an incoming stream of binary data into ADTS and ID3 Frames.
- */
-
-AacStream = function() {
- var
- everything,
- receivedTimeStamp = false,
- timeStamp = 0;
-
- AacStream.prototype.init.call(this);
-
- this.setTimestamp = function (timestamp) {
- timeStamp = timestamp;
- };
-
- this.parseId3TagSize = function(header, byteIndex) {
- var
- returnSize = (header[byteIndex + 6] << 21) |
- (header[byteIndex + 7] << 14) |
- (header[byteIndex + 8] << 7) |
- (header[byteIndex + 9]),
- flags = header[byteIndex + 5],
- footerPresent = (flags & 16) >> 4;
-
- if (footerPresent) {
- return returnSize + 20;
- }
- return returnSize + 10;
- };
-
- this.parseAdtsSize = function(header, byteIndex) {
- var
- lowThree = (header[byteIndex + 5] & 0xE0) >> 5,
- middle = header[byteIndex + 4] << 3,
- highTwo = header[byteIndex + 3] & 0x3 << 11;
-
- return (highTwo | middle) | lowThree;
- };
-
- this.push = function(bytes) {
- var
- frameSize = 0,
- byteIndex = 0,
- chunk,
- packet,
- tempLength;
-
- // If there are bytes remaining from the last segment, prepend them to the
- // bytes that were pushed in
- if (everything !== undefined && everything.length) {
- tempLength = everything.length;
- everything = new Uint8Array(bytes.byteLength + tempLength);
- everything.set(everything.subarray(0, tempLength));
- everything.set(bytes, tempLength);
- } else {
- everything = bytes;
- }
-
- while (everything.length - byteIndex >= 10) {
- if ((everything[byteIndex] === 'I'.charCodeAt(0)) &&
- (everything[byteIndex + 1] === 'D'.charCodeAt(0)) &&
- (everything[byteIndex + 2] === '3'.charCodeAt(0))) {
-
- //check framesize
- frameSize = this.parseId3TagSize(everything, byteIndex);
- //we have enough in the buffer to emit a full packet
- if (frameSize > everything.length) {
- break;
- }
- chunk = {
- type: 'timed-metadata',
- data: everything.subarray(byteIndex, byteIndex + frameSize)
- };
- this.trigger('data', chunk);
- byteIndex += frameSize;
- continue;
- } else if ((everything[byteIndex] & 0xff === 0xff) &&
- ((everything[byteIndex + 1] & 0xf0) === 0xf0)) {
- frameSize = this.parseAdtsSize(everything, byteIndex);
-
- if (frameSize > everything.length) {
- break;
- }
- packet = {
- type: 'audio',
- data: everything.subarray(byteIndex, byteIndex + frameSize),
- pts: timeStamp,
- dts: timeStamp,
- };
- this.trigger('data', packet);
- byteIndex += frameSize;
- continue;
- }
- byteIndex++;
- }
- };
-};
-
-AacStream.prototype = new Stream();
-
-
-
-module.exports = AacStream;
-
-},{"../utils/stream.js":49}],31:[function(require,module,exports){
-'use strict';
-
-var Stream = require('../utils/stream.js');
-
-var AdtsStream;
-
-var
- ADTS_SAMPLING_FREQUENCIES = [
- 96000,
- 88200,
- 64000,
- 48000,
- 44100,
- 32000,
- 24000,
- 22050,
- 16000,
- 12000,
- 11025,
- 8000,
- 7350
- ];
-
-/*
- * Accepts a ElementaryStream and emits data events with parsed
- * AAC Audio Frames of the individual packets. Input audio in ADTS
- * format is unpacked and re-emitted as AAC frames.
- *
- * @see http://wiki.multimedia.cx/index.php?title=ADTS
- * @see http://wiki.multimedia.cx/?title=Understanding_AAC
- */
-AdtsStream = function() {
- var self, buffer;
-
- AdtsStream.prototype.init.call(this);
-
- self = this;
-
- this.push = function(packet) {
- var
- i = 0,
- frameNum = 0,
- frameLength,
- protectionSkipBytes,
- frameEnd,
- oldBuffer,
- numFrames,
- sampleCount,
- adtsFrameDuration;
-
- if (packet.type !== 'audio') {
- // ignore non-audio data
- return;
- }
-
- // Prepend any data in the buffer to the input data so that we can parse
- // aac frames the cross a PES packet boundary
- if (buffer) {
- oldBuffer = buffer;
- buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength);
- buffer.set(oldBuffer);
- buffer.set(packet.data, oldBuffer.byteLength);
- } else {
- buffer = packet.data;
- }
-
- // unpack any ADTS frames which have been fully received
- // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS
- while (i + 5 < buffer.length) {
-
- // Loook for the start of an ADTS header..
- if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) {
- // If a valid header was not found, jump one forward and attempt to
- // find a valid ADTS header starting at the next byte
- i++;
- continue;
- }
-
- // The protection skip bit tells us if we have 2 bytes of CRC data at the
- // end of the ADTS header
- protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2;
-
- // Frame length is a 13 bit integer starting 16 bits from the
- // end of the sync sequence
- frameLength = ((buffer[i + 3] & 0x03) << 11) |
- (buffer[i + 4] << 3) |
- ((buffer[i + 5] & 0xe0) >> 5);
-
- sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024;
- adtsFrameDuration = (sampleCount * 90000) /
- ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2];
-
- frameEnd = i + frameLength;
-
- // If we don't have enough data to actually finish this ADTS frame, return
- // and wait for more data
- if (buffer.byteLength < frameEnd) {
- return;
- }
-
- // Otherwise, deliver the complete AAC frame
- this.trigger('data', {
- pts: packet.pts + (frameNum * adtsFrameDuration),
- dts: packet.dts + (frameNum * adtsFrameDuration),
- sampleCount: sampleCount,
- audioobjecttype: ((buffer[i + 2] >>> 6) & 0x03) + 1,
- channelcount: ((buffer[i + 2] & 1) << 3) |
- ((buffer[i + 3] & 0xc0) >>> 6),
- samplerate: ADTS_SAMPLING_FREQUENCIES[(buffer[i + 2] & 0x3c) >>> 2],
- samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2,
- // assume ISO/IEC 14496-12 AudioSampleEntry default of 16
- samplesize: 16,
- data: buffer.subarray(i + 7 + protectionSkipBytes, frameEnd)
- });
-
- // If the buffer is empty, clear it and return
- if (buffer.byteLength === frameEnd) {
- buffer = undefined;
- return;
- }
-
- frameNum++;
-
- // Remove the finished frame from the buffer and start the process again
- buffer = buffer.subarray(frameEnd);
- }
- };
- this.flush = function() {
- this.trigger('done');
- };
-};
-
-AdtsStream.prototype = new Stream();
-
-module.exports = AdtsStream;
-
-},{"../utils/stream.js":49}],32:[function(require,module,exports){
-'use strict';
-
-var Stream = require('../utils/stream.js');
-var ExpGolomb = require('../utils/exp-golomb.js');
-
-var H264Stream, NalByteStream;
-
-/**
- * Accepts a NAL unit byte stream and unpacks the embedded NAL units.
- */
-NalByteStream = function() {
- var
- syncPoint = 0,
- i,
- buffer;
- NalByteStream.prototype.init.call(this);
-
- this.push = function(data) {
- var swapBuffer;
-
- if (!buffer) {
- buffer = data.data;
- } else {
- swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);
- swapBuffer.set(buffer);
- swapBuffer.set(data.data, buffer.byteLength);
- buffer = swapBuffer;
- }
-
- // Rec. ITU-T H.264, Annex B
- // scan for NAL unit boundaries
-
- // a match looks like this:
- // 0 0 1 .. NAL .. 0 0 1
- // ^ sync point ^ i
- // or this:
- // 0 0 1 .. NAL .. 0 0 0
- // ^ sync point ^ i
-
- // advance the sync point to a NAL start, if necessary
- for (; syncPoint < buffer.byteLength - 3; syncPoint++) {
- if (buffer[syncPoint + 2] === 1) {
- // the sync point is properly aligned
- i = syncPoint + 5;
- break;
- }
- }
-
- while (i < buffer.byteLength) {
- // look at the current byte to determine if we've hit the end of
- // a NAL unit boundary
- switch (buffer[i]) {
- case 0:
- // skip past non-sync sequences
- if (buffer[i - 1] !== 0) {
- i += 2;
- break;
- } else if (buffer[i - 2] !== 0) {
- i++;
- break;
- }
-
- // deliver the NAL unit
- this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));
-
- // drop trailing zeroes
- do {
- i++;
- } while (buffer[i] !== 1 && i < buffer.length);
- syncPoint = i - 2;
- i += 3;
- break;
- case 1:
- // skip past non-sync sequences
- if (buffer[i - 1] !== 0 ||
- buffer[i - 2] !== 0) {
- i += 3;
- break;
- }
-
- // deliver the NAL unit
- this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));
- syncPoint = i - 2;
- i += 3;
- break;
- default:
- // the current byte isn't a one or zero, so it cannot be part
- // of a sync sequence
- i += 3;
- break;
- }
- }
- // filter out the NAL units that were delivered
- buffer = buffer.subarray(syncPoint);
- i -= syncPoint;
- syncPoint = 0;
- };
-
- this.flush = function() {
- // deliver the last buffered NAL unit
- if (buffer && buffer.byteLength > 3) {
- this.trigger('data', buffer.subarray(syncPoint + 3));
- }
- // reset the stream state
- buffer = null;
- syncPoint = 0;
- this.trigger('done');
- };
-};
-NalByteStream.prototype = new Stream();
-
-/**
- * Accepts input from a ElementaryStream and produces H.264 NAL unit data
- * events.
- */
-H264Stream = function() {
- var
- nalByteStream = new NalByteStream(),
- self,
- trackId,
- currentPts,
- currentDts,
-
- discardEmulationPreventionBytes,
- readSequenceParameterSet,
- skipScalingList;
-
- H264Stream.prototype.init.call(this);
- self = this;
-
- this.push = function(packet) {
- if (packet.type !== 'video') {
- return;
- }
- trackId = packet.trackId;
- currentPts = packet.pts;
- currentDts = packet.dts;
-
- nalByteStream.push(packet);
- };
-
- nalByteStream.on('data', function(data) {
- var
- event = {
- trackId: trackId,
- pts: currentPts,
- dts: currentDts,
- data: data
- };
-
- switch (data[0] & 0x1f) {
- case 0x05:
- event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';
- break;
- case 0x06:
- event.nalUnitType = 'sei_rbsp';
- event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));
- break;
- case 0x07:
- event.nalUnitType = 'seq_parameter_set_rbsp';
- event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));
- event.config = readSequenceParameterSet(event.escapedRBSP);
- break;
- case 0x08:
- event.nalUnitType = 'pic_parameter_set_rbsp';
- break;
- case 0x09:
- event.nalUnitType = 'access_unit_delimiter_rbsp';
- break;
-
- default:
- break;
- }
- self.trigger('data', event);
- });
- nalByteStream.on('done', function() {
- self.trigger('done');
- });
-
- this.flush = function() {
- nalByteStream.flush();
- };
-
- /**
- * Advance the ExpGolomb decoder past a scaling list. The scaling
- * list is optionally transmitted as part of a sequence parameter
- * set and is not relevant to transmuxing.
- * @param count {number} the number of entries in this scaling list
- * @param expGolombDecoder {object} an ExpGolomb pointed to the
- * start of a scaling list
- * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1
- */
- skipScalingList = function(count, expGolombDecoder) {
- var
- lastScale = 8,
- nextScale = 8,
- j,
- deltaScale;
-
- for (j = 0; j < count; j++) {
- if (nextScale !== 0) {
- deltaScale = expGolombDecoder.readExpGolomb();
- nextScale = (lastScale + deltaScale + 256) % 256;
- }
-
- lastScale = (nextScale === 0) ? lastScale : nextScale;
- }
- };
-
- /**
- * Expunge any "Emulation Prevention" bytes from a "Raw Byte
- * Sequence Payload"
- * @param data {Uint8Array} the bytes of a RBSP from a NAL
- * unit
- * @return {Uint8Array} the RBSP without any Emulation
- * Prevention Bytes
- */
- discardEmulationPreventionBytes = function(data) {
- var
- length = data.byteLength,
- emulationPreventionBytesPositions = [],
- i = 1,
- newLength, newData;
-
- // Find all `Emulation Prevention Bytes`
- while (i < length - 2) {
- if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {
- emulationPreventionBytesPositions.push(i + 2);
- i += 2;
- } else {
- i++;
- }
- }
-
- // If no Emulation Prevention Bytes were found just return the original
- // array
- if (emulationPreventionBytesPositions.length === 0) {
- return data;
- }
-
- // Create a new array to hold the NAL unit data
- newLength = length - emulationPreventionBytesPositions.length;
- newData = new Uint8Array(newLength);
- var sourceIndex = 0;
-
- for (i = 0; i < newLength; sourceIndex++, i++) {
- if (sourceIndex === emulationPreventionBytesPositions[0]) {
- // Skip this byte
- sourceIndex++;
- // Remove this position index
- emulationPreventionBytesPositions.shift();
- }
- newData[i] = data[sourceIndex];
- }
-
- return newData;
- };
-
- /**
- * Read a sequence parameter set and return some interesting video
- * properties. A sequence parameter set is the H264 metadata that
- * describes the properties of upcoming video frames.
- * @param data {Uint8Array} the bytes of a sequence parameter set
- * @return {object} an object with configuration parsed from the
- * sequence parameter set, including the dimensions of the
- * associated video frames.
- */
- readSequenceParameterSet = function(data) {
- var
- frameCropLeftOffset = 0,
- frameCropRightOffset = 0,
- frameCropTopOffset = 0,
- frameCropBottomOffset = 0,
- expGolombDecoder, profileIdc, levelIdc, profileCompatibility,
- chromaFormatIdc, picOrderCntType,
- numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,
- picHeightInMapUnitsMinus1,
- frameMbsOnlyFlag,
- scalingListCount,
- i;
-
- expGolombDecoder = new ExpGolomb(data);
- profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc
- profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag
- levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)
- expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id
-
- // some profiles have more optional data we don't need
- if (profileIdc === 100 ||
- profileIdc === 110 ||
- profileIdc === 122 ||
- profileIdc === 244 ||
- profileIdc === 44 ||
- profileIdc === 83 ||
- profileIdc === 86 ||
- profileIdc === 118 ||
- profileIdc === 128 ||
- profileIdc === 138 ||
- profileIdc === 139 ||
- profileIdc === 134) {
- chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();
- if (chromaFormatIdc === 3) {
- expGolombDecoder.skipBits(1); // separate_colour_plane_flag
- }
- expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8
- expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8
- expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag
- if (expGolombDecoder.readBoolean()) { // seq_scaling_matrix_present_flag
- scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;
- for (i = 0; i < scalingListCount; i++) {
- if (expGolombDecoder.readBoolean()) { // seq_scaling_list_present_flag[ i ]
- if (i < 6) {
- skipScalingList(16, expGolombDecoder);
- } else {
- skipScalingList(64, expGolombDecoder);
- }
- }
- }
- }
- }
-
- expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4
- picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();
-
- if (picOrderCntType === 0) {
- expGolombDecoder.readUnsignedExpGolomb(); //log2_max_pic_order_cnt_lsb_minus4
- } else if (picOrderCntType === 1) {
- expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag
- expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic
- expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field
- numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();
- for(i = 0; i < numRefFramesInPicOrderCntCycle; i++) {
- expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]
- }
- }
-
- expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames
- expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag
-
- picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();
- picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();
-
- frameMbsOnlyFlag = expGolombDecoder.readBits(1);
- if (frameMbsOnlyFlag === 0) {
- expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag
- }
-
- expGolombDecoder.skipBits(1); // direct_8x8_inference_flag
- if (expGolombDecoder.readBoolean()) { // frame_cropping_flag
- frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();
- frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();
- frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();
- frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();
- }
-
- return {
- profileIdc: profileIdc,
- levelIdc: levelIdc,
- profileCompatibility: profileCompatibility,
- width: ((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2,
- height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - (frameCropTopOffset * 2) - (frameCropBottomOffset * 2)
- };
- };
-
-};
-H264Stream.prototype = new Stream();
-
-module.exports = {
- H264Stream: H264Stream,
- NalByteStream: NalByteStream,
-};
-
-},{"../utils/exp-golomb.js":48,"../utils/stream.js":49}],33:[function(require,module,exports){
-module.exports = {
- adts: require('./adts'),
- h264: require('./h264'),
-};
-
-},{"./adts":31,"./h264":32}],34:[function(require,module,exports){
-/**
- * An object that stores the bytes of an FLV tag and methods for
- * querying and manipulating that data.
- * @see http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf
- */
-'use strict';
-
-var FlvTag;
-
-// (type:uint, extraData:Boolean = false) extends ByteArray
-FlvTag = function(type, extraData) {
- var
- // Counter if this is a metadata tag, nal start marker if this is a video
- // tag. unused if this is an audio tag
- adHoc = 0, // :uint
-
- // The default size is 16kb but this is not enough to hold iframe
- // data and the resizing algorithm costs a bit so we create a larger
- // starting buffer for video tags
- bufferStartSize = 16384,
-
- // checks whether the FLV tag has enough capacity to accept the proposed
- // write and re-allocates the internal buffers if necessary
- prepareWrite = function(flv, count) {
- var
- bytes,
- minLength = flv.position + count;
- if (minLength < flv.bytes.byteLength) {
- // there's enough capacity so do nothing
- return;
- }
-
- // allocate a new buffer and copy over the data that will not be modified
- bytes = new Uint8Array(minLength * 2);
- bytes.set(flv.bytes.subarray(0, flv.position), 0);
- flv.bytes = bytes;
- flv.view = new DataView(flv.bytes.buffer);
- },
-
- // commonly used metadata properties
- widthBytes = FlvTag.widthBytes || new Uint8Array('width'.length),
- heightBytes = FlvTag.heightBytes || new Uint8Array('height'.length),
- videocodecidBytes = FlvTag.videocodecidBytes || new Uint8Array('videocodecid'.length),
- i;
-
- if (!FlvTag.widthBytes) {
- // calculating the bytes of common metadata names ahead of time makes the
- // corresponding writes faster because we don't have to loop over the
- // characters
- // re-test with test/perf.html if you're planning on changing this
- for (i = 0; i < 'width'.length; i++) {
- widthBytes[i] = 'width'.charCodeAt(i);
- }
- for (i = 0; i < 'height'.length; i++) {
- heightBytes[i] = 'height'.charCodeAt(i);
- }
- for (i = 0; i < 'videocodecid'.length; i++) {
- videocodecidBytes[i] = 'videocodecid'.charCodeAt(i);
- }
-
- FlvTag.widthBytes = widthBytes;
- FlvTag.heightBytes = heightBytes;
- FlvTag.videocodecidBytes = videocodecidBytes;
- }
-
- this.keyFrame = false; // :Boolean
-
- switch(type) {
- case FlvTag.VIDEO_TAG:
- this.length = 16;
- // Start the buffer at 256k
- bufferStartSize *= 6;
- break;
- case FlvTag.AUDIO_TAG:
- this.length = 13;
- this.keyFrame = true;
- break;
- case FlvTag.METADATA_TAG:
- this.length = 29;
- this.keyFrame = true;
- break;
- default:
- throw("Error Unknown TagType");
- }
-
- this.bytes = new Uint8Array(bufferStartSize);
- this.view = new DataView(this.bytes.buffer);
- this.bytes[0] = type;
- this.position = this.length;
- this.keyFrame = extraData; // Defaults to false
-
- // presentation timestamp
- this.pts = 0;
- // decoder timestamp
- this.dts = 0;
-
- // ByteArray#writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0)
- this.writeBytes = function(bytes, offset, length) {
- var
- start = offset || 0,
- end;
- length = length || bytes.byteLength;
- end = start + length;
-
- prepareWrite(this, length);
- this.bytes.set(bytes.subarray(start, end), this.position);
-
- this.position += length;
- this.length = Math.max(this.length, this.position);
- };
-
- // ByteArray#writeByte(value:int):void
- this.writeByte = function(byte) {
- prepareWrite(this, 1);
- this.bytes[this.position] = byte;
- this.position++;
- this.length = Math.max(this.length, this.position);
- };
-
- // ByteArray#writeShort(value:int):void
- this.writeShort = function(short) {
- prepareWrite(this, 2);
- this.view.setUint16(this.position, short);
- this.position += 2;
- this.length = Math.max(this.length, this.position);
- };
-
- // Negative index into array
- // (pos:uint):int
- this.negIndex = function(pos) {
- return this.bytes[this.length - pos];
- };
-
- // The functions below ONLY work when this[0] == VIDEO_TAG.
- // We are not going to check for that because we dont want the overhead
- // (nal:ByteArray = null):int
- this.nalUnitSize = function() {
- if (adHoc === 0) {
- return 0;
- }
-
- return this.length - (adHoc + 4);
- };
-
- this.startNalUnit = function() {
- // remember position and add 4 bytes
- if (adHoc > 0) {
- throw new Error("Attempted to create new NAL wihout closing the old one");
- }
-
- // reserve 4 bytes for nal unit size
- adHoc = this.length;
- this.length += 4;
- this.position = this.length;
- };
-
- // (nal:ByteArray = null):void
- this.endNalUnit = function(nalContainer) {
- var
- nalStart, // :uint
- nalLength; // :uint
-
- // Rewind to the marker and write the size
- if (this.length === adHoc + 4) {
- // we started a nal unit, but didnt write one, so roll back the 4 byte size value
- this.length -= 4;
- } else if (adHoc > 0) {
- nalStart = adHoc + 4;
- nalLength = this.length - nalStart;
-
- this.position = adHoc;
- this.view.setUint32(this.position, nalLength);
- this.position = this.length;
-
- if (nalContainer) {
- // Add the tag to the NAL unit
- nalContainer.push(this.bytes.subarray(nalStart, nalStart + nalLength));
- }
- }
-
- adHoc = 0;
- };
-
- /**
- * Write out a 64-bit floating point valued metadata property. This method is
- * called frequently during a typical parse and needs to be fast.
- */
- // (key:String, val:Number):void
- this.writeMetaDataDouble = function(key, val) {
- var i;
- prepareWrite(this, 2 + key.length + 9);
-
- // write size of property name
- this.view.setUint16(this.position, key.length);
- this.position += 2;
-
- // this next part looks terrible but it improves parser throughput by
- // 10kB/s in my testing
-
- // write property name
- if (key === 'width') {
- this.bytes.set(widthBytes, this.position);
- this.position += 5;
- } else if (key === 'height') {
- this.bytes.set(heightBytes, this.position);
- this.position += 6;
- } else if (key === 'videocodecid') {
- this.bytes.set(videocodecidBytes, this.position);
- this.position += 12;
- } else {
- for (i = 0; i < key.length; i++) {
- this.bytes[this.position] = key.charCodeAt(i);
- this.position++;
- }
- }
-
- // skip null byte
- this.position++;
-
- // write property value
- this.view.setFloat64(this.position, val);
- this.position += 8;
-
- // update flv tag length
- this.length = Math.max(this.length, this.position);
- ++adHoc;
- };
-
- // (key:String, val:Boolean):void
- this.writeMetaDataBoolean = function(key, val) {
- var i;
- prepareWrite(this, 2);
- this.view.setUint16(this.position, key.length);
- this.position += 2;
- for (i = 0; i < key.length; i++) {
- // if key.charCodeAt(i) >= 255, handle error
- prepareWrite(this, 1);
- this.bytes[this.position] = key.charCodeAt(i);
- this.position++;
- }
- prepareWrite(this, 2);
- this.view.setUint8(this.position, 0x01);
- this.position++;
- this.view.setUint8(this.position, val ? 0x01 : 0x00);
- this.position++;
- this.length = Math.max(this.length, this.position);
- ++adHoc;
- };
-
- // ():ByteArray
- this.finalize = function() {
- var
- dtsDelta, // :int
- len; // :int
-
- switch(this.bytes[0]) {
- // Video Data
- case FlvTag.VIDEO_TAG:
- this.bytes[11] = ((this.keyFrame || extraData) ? 0x10 : 0x20 ) | 0x07; // We only support AVC, 1 = key frame (for AVC, a seekable frame), 2 = inter frame (for AVC, a non-seekable frame)
- this.bytes[12] = extraData ? 0x00 : 0x01;
-
- dtsDelta = this.pts - this.dts;
- this.bytes[13] = (dtsDelta & 0x00FF0000) >>> 16;
- this.bytes[14] = (dtsDelta & 0x0000FF00) >>> 8;
- this.bytes[15] = (dtsDelta & 0x000000FF) >>> 0;
- break;
-
- case FlvTag.AUDIO_TAG:
- this.bytes[11] = 0xAF; // 44 kHz, 16-bit stereo
- this.bytes[12] = extraData ? 0x00 : 0x01;
- break;
-
- case FlvTag.METADATA_TAG:
- this.position = 11;
- this.view.setUint8(this.position, 0x02); // String type
- this.position++;
- this.view.setUint16(this.position, 0x0A); // 10 Bytes
- this.position += 2;
- // set "onMetaData"
- this.bytes.set([0x6f, 0x6e, 0x4d, 0x65,
- 0x74, 0x61, 0x44, 0x61,
- 0x74, 0x61], this.position);
- this.position += 10;
- this.bytes[this.position] = 0x08; // Array type
- this.position++;
- this.view.setUint32(this.position, adHoc);
- this.position = this.length;
- this.bytes.set([0, 0, 9], this.position);
- this.position += 3; // End Data Tag
- this.length = this.position;
- break;
- }
-
- len = this.length - 11;
-
- // write the DataSize field
- this.bytes[ 1] = (len & 0x00FF0000) >>> 16;
- this.bytes[ 2] = (len & 0x0000FF00) >>> 8;
- this.bytes[ 3] = (len & 0x000000FF) >>> 0;
- // write the Timestamp
- this.bytes[ 4] = (this.dts & 0x00FF0000) >>> 16;
- this.bytes[ 5] = (this.dts & 0x0000FF00) >>> 8;
- this.bytes[ 6] = (this.dts & 0x000000FF) >>> 0;
- this.bytes[ 7] = (this.dts & 0xFF000000) >>> 24;
- // write the StreamID
- this.bytes[ 8] = 0;
- this.bytes[ 9] = 0;
- this.bytes[10] = 0;
-
- // Sometimes we're at the end of the view and have one slot to write a
- // uint32, so, prepareWrite of count 4, since, view is uint8
- prepareWrite(this, 4);
- this.view.setUint32(this.length, this.length);
- this.length += 4;
- this.position += 4;
-
- // trim down the byte buffer to what is actually being used
- this.bytes = this.bytes.subarray(0, this.length);
- this.frameTime = FlvTag.frameTime(this.bytes);
- // if bytes.bytelength isn't equal to this.length, handle error
- return this;
- };
-};
-
-FlvTag.AUDIO_TAG = 0x08; // == 8, :uint
-FlvTag.VIDEO_TAG = 0x09; // == 9, :uint
-FlvTag.METADATA_TAG = 0x12; // == 18, :uint
-
-// (tag:ByteArray):Boolean {
-FlvTag.isAudioFrame = function(tag) {
- return FlvTag.AUDIO_TAG === tag[0];
-};
-
-// (tag:ByteArray):Boolean {
-FlvTag.isVideoFrame = function(tag) {
- return FlvTag.VIDEO_TAG === tag[0];
-};
-
-// (tag:ByteArray):Boolean {
-FlvTag.isMetaData = function(tag) {
- return FlvTag.METADATA_TAG === tag[0];
-};
-
-// (tag:ByteArray):Boolean {
-FlvTag.isKeyFrame = function(tag) {
- if (FlvTag.isVideoFrame(tag)) {
- return tag[11] === 0x17;
- }
-
- if (FlvTag.isAudioFrame(tag)) {
- return true;
- }
-
- if (FlvTag.isMetaData(tag)) {
- return true;
- }
-
- return false;
-};
-
-// (tag:ByteArray):uint {
-FlvTag.frameTime = function(tag) {
- var pts = tag[ 4] << 16; // :uint
- pts |= tag[ 5] << 8;
- pts |= tag[ 6] << 0;
- pts |= tag[ 7] << 24;
- return pts;
-};
-
-module.exports = FlvTag;
-
-},{}],35:[function(require,module,exports){
-module.exports = {
- tag: require('./flv-tag'),
- Transmuxer: require('./transmuxer'),
- tools: require('../tools/flv-inspector'),
-};
-
-},{"../tools/flv-inspector":46,"./flv-tag":34,"./transmuxer":36}],36:[function(require,module,exports){
-'use strict';
-
-var Stream = require('../utils/stream.js');
-var FlvTag = require('./flv-tag.js');
-var m2ts = require('../m2ts/m2ts.js');
-var AdtsStream = require('../codecs/adts.js');
-var H264Stream = require('../codecs/h264').H264Stream;
-
-var
- MetadataStream,
- Transmuxer,
- VideoSegmentStream,
- AudioSegmentStream,
- CoalesceStream,
- collectTimelineInfo,
- metaDataTag,
- extraDataTag;
-
-/**
- * Store information about the start and end of the tracka and the
- * duration for each frame/sample we process in order to calculate
- * the baseMediaDecodeTime
- */
-collectTimelineInfo = function (track, data) {
- if (typeof data.pts === 'number') {
- if (track.timelineStartInfo.pts === undefined) {
- track.timelineStartInfo.pts = data.pts;
- } else {
- track.timelineStartInfo.pts =
- Math.min(track.timelineStartInfo.pts, data.pts);
- }
- }
-
- if (typeof data.dts === 'number') {
- if (track.timelineStartInfo.dts === undefined) {
- track.timelineStartInfo.dts = data.dts;
- } else {
- track.timelineStartInfo.dts =
- Math.min(track.timelineStartInfo.dts, data.dts);
- }
- }
-};
-
-metaDataTag = function(track, pts) {
- var
- tag = new FlvTag(FlvTag.METADATA_TAG); // :FlvTag
-
- tag.dts = pts;
- tag.pts = pts;
-
- tag.writeMetaDataDouble("videocodecid", 7);
- tag.writeMetaDataDouble("width", track.width);
- tag.writeMetaDataDouble("height", track.height);
-
- return tag;
-};
-
-extraDataTag = function(track, pts) {
- var
- i,
- tag = new FlvTag(FlvTag.VIDEO_TAG, true);
-
- tag.dts = pts;
- tag.pts = pts;
-
- tag.writeByte(0x01);// version
- tag.writeByte(track.profileIdc);// profile
- tag.writeByte(track.profileCompatibility);// compatibility
- tag.writeByte(track.levelIdc);// level
- tag.writeByte(0xFC | 0x03); // reserved (6 bits), NULA length size - 1 (2 bits)
- tag.writeByte(0xE0 | 0x01 ); // reserved (3 bits), num of SPS (5 bits)
- tag.writeShort( track.sps[0].length ); // data of SPS
- tag.writeBytes( track.sps[0] ); // SPS
-
- tag.writeByte(track.pps.length); // num of PPS (will there ever be more that 1 PPS?)
- for (i = 0 ; i < track.pps.length ; ++i) {
- tag.writeShort(track.pps[i].length); // 2 bytes for length of PPS
- tag.writeBytes(track.pps[i]); // data of PPS
- }
-
- return tag;
-};
-
-/**
- * Constructs a single-track, media segment from AAC data
- * events. The output of this stream can be fed to flash.
- */
-AudioSegmentStream = function(track) {
- var
- adtsFrames = [],
- adtsFramesLength = 0,
- sequenceNumber = 0,
- earliestAllowedDts = 0,
- oldExtraData;
-
- AudioSegmentStream.prototype.init.call(this);
-
- this.push = function(data) {
- collectTimelineInfo(track, data);
-
- if (track && track.channelcount === undefined) {
- track.audioobjecttype = data.audioobjecttype;
- track.channelcount = data.channelcount;
- track.samplerate = data.samplerate;
- track.samplingfrequencyindex = data.samplingfrequencyindex;
- track.samplesize = data.samplesize;
- track.extraData = (track.audioobjecttype << 11) |
- (track.samplingfrequencyindex << 7) |
- (track.channelcount << 3);
- }
-
- data.pts = Math.round(data.pts / 90);
- data.dts = Math.round(data.dts / 90);
-
- // buffer audio data until end() is called
- adtsFrames.push(data);
- };
-
- this.flush = function() {
- var currentFrame, adtsFrame, deltaDts,lastMetaPts, tags = [];
- // return early if no audio data has been observed
- if (adtsFrames.length === 0) {
- this.trigger('done');
- return;
- }
-
- lastMetaPts = -Infinity;
-
- while (adtsFrames.length) {
- currentFrame = adtsFrames.shift();
-
- // write out metadata tags every 1 second so that the decoder
- // is re-initialized quickly after seeking into a different
- // audio configuration
- if (track.extraData !== oldExtraData || currentFrame.pts - lastMetaPts >= 1000) {
- adtsFrame = new FlvTag(FlvTag.METADATA_TAG);
- adtsFrame.pts = currentFrame.pts;
- adtsFrame.dts = currentFrame.dts;
-
- // AAC is always 10
- adtsFrame.writeMetaDataDouble("audiocodecid", 10);
- adtsFrame.writeMetaDataBoolean("stereo", 2 === track.channelcount);
- adtsFrame.writeMetaDataDouble ("audiosamplerate", track.samplerate);
- // Is AAC always 16 bit?
- adtsFrame.writeMetaDataDouble ("audiosamplesize", 16);
-
- tags.push(adtsFrame);
-
- oldExtraData = track.extraData;
-
- adtsFrame = new FlvTag(FlvTag.AUDIO_TAG, true);
- // For audio, DTS is always the same as PTS. We want to set the DTS
- // however so we can compare with video DTS to determine approximate
- // packet order
- adtsFrame.pts = currentFrame.pts;
- adtsFrame.dts = currentFrame.dts;
-
- adtsFrame.view.setUint16(adtsFrame.position, track.extraData);
- adtsFrame.position += 2;
- adtsFrame.length = Math.max(adtsFrame.length, adtsFrame.position);
-
- tags.push(adtsFrame);
-
- lastMetaPts = currentFrame.pts;
- }
- adtsFrame = new FlvTag(FlvTag.AUDIO_TAG);
- adtsFrame.pts = currentFrame.pts;
- adtsFrame.dts = currentFrame.dts;
-
- adtsFrame.writeBytes(currentFrame.data);
-
- tags.push(adtsFrame);
- }
-
- oldExtraData = null;
- this.trigger('data', {track: track, tags: tags});
-
- this.trigger('done');
- };
-};
-AudioSegmentStream.prototype = new Stream();
-
-/**
- * Store FlvTags for the h264 stream
- * @param track {object} track metadata configuration
- */
-VideoSegmentStream = function(track) {
- var
- sequenceNumber = 0,
- nalUnits = [],
- nalUnitsLength = 0,
- config,
- h264Frame;
- VideoSegmentStream.prototype.init.call(this);
-
- this.finishFrame = function(tags, frame) {
- if (!frame) {
- return;
- }
- // Check if keyframe and the length of tags.
- // This makes sure we write metadata on the first frame of a segment.
- if (config && track && track.newMetadata &&
- (frame.keyFrame || tags.length === 0)) {
- // Push extra data on every IDR frame in case we did a stream change + seek
- tags.push(metaDataTag(config, frame.pts));
- tags.push(extraDataTag(track, frame.pts));
- track.newMetadata = false;
- }
-
- frame.endNalUnit();
- tags.push(frame);
- };
-
- this.push = function(data) {
- collectTimelineInfo(track, data);
-
- data.pts = Math.round(data.pts / 90);
- data.dts = Math.round(data.dts / 90);
-
- // buffer video until flush() is called
- nalUnits.push(data);
- };
-
- this.flush = function() {
- var
- currentNal,
- tags = [];
-
- // Throw away nalUnits at the start of the byte stream until we find
- // the first AUD
- while (nalUnits.length) {
- if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {
- break;
- }
- nalUnits.shift();
- }
-
- // return early if no video data has been observed
- if (nalUnits.length === 0) {
- this.trigger('done');
- return;
- }
-
- while (nalUnits.length) {
- currentNal = nalUnits.shift();
-
- // record the track config
- if (currentNal.nalUnitType === 'seq_parameter_set_rbsp') {
- track.newMetadata = true;
- config = currentNal.config;
- track.width = config.width;
- track.height = config.height;
- track.sps = [currentNal.data];
- track.profileIdc = config.profileIdc;
- track.levelIdc = config.levelIdc;
- track.profileCompatibility = config.profileCompatibility;
- h264Frame.endNalUnit();
- } else if (currentNal.nalUnitType === 'pic_parameter_set_rbsp') {
- track.newMetadata = true;
- track.pps = [currentNal.data];
- h264Frame.endNalUnit();
- } else if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') {
- if (h264Frame) {
- this.finishFrame(tags, h264Frame);
- }
- h264Frame = new FlvTag(FlvTag.VIDEO_TAG);
- h264Frame.pts = currentNal.pts;
- h264Frame.dts = currentNal.dts;
- } else {
- if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') {
- // the current sample is a key frame
- h264Frame.keyFrame = true;
- }
- h264Frame.endNalUnit();
- }
- h264Frame.startNalUnit();
- h264Frame.writeBytes(currentNal.data);
- }
- if (h264Frame) {
- this.finishFrame(tags, h264Frame);
- }
-
- this.trigger('data', {track: track, tags: tags});
-
- // Continue with the flush process now
- this.trigger('done');
- };
-};
-
-VideoSegmentStream.prototype = new Stream();
-
-/**
- * The final stage of the transmuxer that emits the flv tags
- * for audio, video, and metadata. Also tranlates in time and
- * outputs caption data and id3 cues.
- */
-CoalesceStream = function(options) {
- // Number of Tracks per output segment
- // If greater than 1, we combine multiple
- // tracks into a single segment
- this.numberOfTracks = 0;
- this.metadataStream = options.metadataStream;
-
- this.videoTags = [];
- this.audioTags = [];
- this.videoTrack = null;
- this.audioTrack = null;
- this.pendingCaptions = [];
- this.pendingMetadata = [];
- this.pendingTracks = 0;
-
- CoalesceStream.prototype.init.call(this);
-
- // Take output from multiple
- this.push = function(output) {
- // buffer incoming captions until the associated video segment
- // finishes
- if (output.text) {
- return this.pendingCaptions.push(output);
- }
- // buffer incoming id3 tags until the final flush
- if (output.frames) {
- return this.pendingMetadata.push(output);
- }
-
- if (output.track.type === 'video') {
- this.videoTrack = output.track;
- this.videoTags = output.tags;
- this.pendingTracks++;
- }
- if (output.track.type === 'audio') {
- this.audioTrack = output.track;
- this.audioTags = output.tags;
- this.pendingTracks++;
- }
- };
-};
-
-CoalesceStream.prototype = new Stream();
-CoalesceStream.prototype.flush = function() {
- var
- id3,
- caption,
- i,
- timelineStartPts,
- event = {
- tags: {},
- captions: [],
- metadata: []
- };
-
- if (this.pendingTracks < this.numberOfTracks) {
- return;
- }
-
- if (this.videoTrack) {
- timelineStartPts = this.videoTrack.timelineStartInfo.pts;
- } else if (this.audioTrack) {
- timelineStartPts = this.audioTrack.timelineStartInfo.pts;
- }
-
- event.tags.videoTags = this.videoTags;
- event.tags.audioTags = this.audioTags;
-
- // Translate caption PTS times into second offsets into the
- // video timeline for the segment
- for (i = 0; i < this.pendingCaptions.length; i++) {
- caption = this.pendingCaptions[i];
- caption.startTime = caption.startPts - timelineStartPts;
- caption.startTime /= 90e3;
- caption.endTime = caption.endPts - timelineStartPts;
- caption.endTime /= 90e3;
- event.captions.push(caption);
- }
-
- // Translate ID3 frame PTS times into second offsets into the
- // video timeline for the segment
- for (i = 0; i < this.pendingMetadata.length; i++) {
- id3 = this.pendingMetadata[i];
- id3.cueTime = id3.pts - timelineStartPts;
- id3.cueTime /= 90e3;
- event.metadata.push(id3);
- }
- // We add this to every single emitted segment even though we only need
- // it for the first
- event.metadata.dispatchType = this.metadataStream.dispatchType;
-
- // Reset stream state
- this.videoTrack = null;
- this.audioTrack = null;
- this.videoTags = [];
- this.audioTags = [];
- this.pendingCaptions.length = 0;
- this.pendingMetadata.length = 0;
- this.pendingTracks = 0;
-
- // Emit the final segment
- this.trigger('data', event);
-
- this.trigger('done');
-};
-
-/**
- * An object that incrementally transmuxes MPEG2 Trasport Stream
- * chunks into an FLV.
- */
-Transmuxer = function(options) {
- var
- self = this,
- videoTrack,
- audioTrack,
-
- packetStream, parseStream, elementaryStream,
- adtsStream, h264Stream,
- videoSegmentStream, audioSegmentStream, captionStream,
- coalesceStream;
-
- Transmuxer.prototype.init.call(this);
-
- options = options || {};
-
- // expose the metadata stream
- this.metadataStream = new m2ts.MetadataStream();
-
- options.metadataStream = this.metadataStream;
-
- // set up the parsing pipeline
- packetStream = new m2ts.TransportPacketStream();
- parseStream = new m2ts.TransportParseStream();
- elementaryStream = new m2ts.ElementaryStream();
- adtsStream = new AdtsStream();
- h264Stream = new H264Stream();
- coalesceStream = new CoalesceStream(options);
-
- // disassemble MPEG2-TS packets into elementary streams
- packetStream
- .pipe(parseStream)
- .pipe(elementaryStream);
-
- // !!THIS ORDER IS IMPORTANT!!
- // demux the streams
- elementaryStream
- .pipe(h264Stream);
- elementaryStream
- .pipe(adtsStream);
-
- elementaryStream
- .pipe(this.metadataStream)
- .pipe(coalesceStream);
- // if CEA-708 parsing is available, hook up a caption stream
- captionStream = new m2ts.CaptionStream();
- h264Stream.pipe(captionStream)
- .pipe(coalesceStream);
-
- // hook up the segment streams once track metadata is delivered
- elementaryStream.on('data', function(data) {
- var i, videoTrack, audioTrack;
-
- if (data.type === 'metadata') {
- i = data.tracks.length;
-
- // scan the tracks listed in the metadata
- while (i--) {
- if (data.tracks[i].type === 'video') {
- videoTrack = data.tracks[i];
- } else if (data.tracks[i].type === 'audio') {
- audioTrack = data.tracks[i];
- }
- }
-
- // hook up the video segment stream to the first track with h264 data
- if (videoTrack && !videoSegmentStream) {
- coalesceStream.numberOfTracks++;
- videoSegmentStream = new VideoSegmentStream(videoTrack);
-
- // Set up the final part of the video pipeline
- h264Stream
- .pipe(videoSegmentStream)
- .pipe(coalesceStream);
- }
-
- if (audioTrack && !audioSegmentStream) {
- // hook up the audio segment stream to the first track with aac data
- coalesceStream.numberOfTracks++;
- audioSegmentStream = new AudioSegmentStream(audioTrack);
-
- // Set up the final part of the audio pipeline
- adtsStream
- .pipe(audioSegmentStream)
- .pipe(coalesceStream);
- }
- }
- });
-
- // feed incoming data to the front of the parsing pipeline
- this.push = function(data) {
- packetStream.push(data);
- };
-
- // flush any buffered data
- this.flush = function() {
- // Start at the top of the pipeline and flush all pending work
- packetStream.flush();
- };
-
- // Re-emit any data coming from the coalesce stream to the outside world
- coalesceStream.on('data', function (event) {
- self.trigger('data', event);
- });
-
- // Let the consumer know we have finished flushing the entire pipeline
- coalesceStream.on('done', function () {
- self.trigger('done');
- });
-
- // For information on the FLV format, see
- // http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf.
- // Technically, this function returns the header and a metadata FLV tag
- // if duration is greater than zero
- // duration in seconds
- // @return {object} the bytes of the FLV header as a Uint8Array
- this.getFlvHeader = function(duration, audio, video) { // :ByteArray {
- var
- headBytes = new Uint8Array(3 + 1 + 1 + 4),
- head = new DataView(headBytes.buffer),
- metadata,
- result,
- metadataLength;
-
- // default arguments
- duration = duration || 0;
- audio = audio === undefined? true : audio;
- video = video === undefined? true : video;
-
- // signature
- head.setUint8(0, 0x46); // 'F'
- head.setUint8(1, 0x4c); // 'L'
- head.setUint8(2, 0x56); // 'V'
-
- // version
- head.setUint8(3, 0x01);
-
- // flags
- head.setUint8(4, (audio ? 0x04 : 0x00) | (video ? 0x01 : 0x00));
-
- // data offset, should be 9 for FLV v1
- head.setUint32(5, headBytes.byteLength);
-
- // init the first FLV tag
- if (duration <= 0) {
- // no duration available so just write the first field of the first
- // FLV tag
- result = new Uint8Array(headBytes.byteLength + 4);
- result.set(headBytes);
- result.set([0, 0, 0, 0], headBytes.byteLength);
- return result;
- }
-
- // write out the duration metadata tag
- metadata = new FlvTag(FlvTag.METADATA_TAG);
- metadata.pts = metadata.dts = 0;
- metadata.writeMetaDataDouble("duration", duration);
- metadataLength = metadata.finalize().length;
- result = new Uint8Array(headBytes.byteLength + metadataLength);
- result.set(headBytes);
- result.set(head.byteLength, metadataLength);
-
- return result;
- };
-};
-Transmuxer.prototype = new Stream();
-
-// forward compatibility
-module.exports = Transmuxer;
-
-},{"../codecs/adts.js":31,"../codecs/h264":32,"../m2ts/m2ts.js":40,"../utils/stream.js":49,"./flv-tag.js":34}],37:[function(require,module,exports){
-'use strict';
-
-var muxjs = {
- codecs: require('./codecs'),
- mp4: require('./mp4'),
- flv: require('./flv'),
- mp2t: require('./m2ts'),
-};
-module.exports = muxjs;
-
-},{"./codecs":33,"./flv":35,"./m2ts":39,"./mp4":43}],38:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2015 Brightcove
- * All rights reserved.
- *
- * Reads in-band caption information from a video elementary
- * stream. Captions must follow the CEA-708 standard for injection
- * into an MPEG-2 transport streams.
- * @see https://en.wikipedia.org/wiki/CEA-708
- */
-
-'use strict';
-
-// -----------------
-// Link To Transport
-// -----------------
-
-// Supplemental enhancement information (SEI) NAL units have a
-// payload type field to indicate how they are to be
-// interpreted. CEAS-708 caption content is always transmitted with
-// payload type 0x04.
-var USER_DATA_REGISTERED_ITU_T_T35 = 4,
- RBSP_TRAILING_BITS = 128,
- Stream = require('../utils/stream');
-
-/**
- * Parse a supplemental enhancement information (SEI) NAL unit.
- * Stops parsing once a message of type ITU T T35 has been found.
- *
- * @param bytes {Uint8Array} the bytes of a SEI NAL unit
- * @return {object} the parsed SEI payload
- * @see Rec. ITU-T H.264, 7.3.2.3.1
- */
-var parseSei = function(bytes) {
- var
- i = 0,
- result = {
- payloadType: -1,
- payloadSize: 0,
- },
- payloadType = 0,
- payloadSize = 0;
-
- // go through the sei_rbsp parsing each each individual sei_message
- while (i < bytes.byteLength) {
- // stop once we have hit the end of the sei_rbsp
- if (bytes[i] === RBSP_TRAILING_BITS) {
- break;
- }
-
- // Parse payload type
- while (bytes[i] === 0xFF) {
- payloadType += 255;
- i++;
- }
- payloadType += bytes[i++];
-
- // Parse payload size
- while (bytes[i] === 0xFF) {
- payloadSize += 255;
- i++;
- }
- payloadSize += bytes[i++];
-
- // this sei_message is a 608/708 caption so save it and break
- // there can only ever be one caption message in a frame's sei
- if (!result.payload && payloadType === USER_DATA_REGISTERED_ITU_T_T35) {
- result.payloadType = payloadType;
- result.payloadSize = payloadSize;
- result.payload = bytes.subarray(i, i + payloadSize);
- break;
- }
-
- // skip the payload and parse the next message
- i += payloadSize;
- payloadType = 0;
- payloadSize = 0;
- }
-
- return result;
-};
-
-// see ANSI/SCTE 128-1 (2013), section 8.1
-var parseUserData = function(sei) {
- // itu_t_t35_contry_code must be 181 (United States) for
- // captions
- if (sei.payload[0] !== 181) {
- return null;
- }
-
- // itu_t_t35_provider_code should be 49 (ATSC) for captions
- if (((sei.payload[1] << 8) | sei.payload[2]) !== 49) {
- return null;
- }
-
- // the user_identifier should be "GA94" to indicate ATSC1 data
- if (String.fromCharCode(sei.payload[3],
- sei.payload[4],
- sei.payload[5],
- sei.payload[6]) !== 'GA94') {
- return null;
- }
-
- // finally, user_data_type_code should be 0x03 for caption data
- if (sei.payload[7] !== 0x03) {
- return null;
- }
-
- // return the user_data_type_structure and strip the trailing
- // marker bits
- return sei.payload.subarray(8, sei.payload.length - 1);
-};
-
-// see CEA-708-D, section 4.4
-var parseCaptionPackets = function(pts, userData) {
- var results = [], i, count, offset, data;
-
- // if this is just filler, return immediately
- if (!(userData[0] & 0x40)) {
- return results;
- }
-
- // parse out the cc_data_1 and cc_data_2 fields
- count = userData[0] & 0x1f;
- for (i = 0; i < count; i++) {
- offset = i * 3;
- data = {
- type: userData[offset + 2] & 0x03,
- pts: pts
- };
-
- // capture cc data when cc_valid is 1
- if (userData[offset + 2] & 0x04) {
- data.ccData = (userData[offset + 3] << 8) | userData[offset + 4];
- results.push(data);
- }
- }
- return results;
-};
-
-var CaptionStream = function() {
- var self = this;
- CaptionStream.prototype.init.call(this);
-
- this.captionPackets_ = [];
-
- this.field1_ = new Cea608Stream();
-
- // forward data and done events from field1_ to this CaptionStream
- this.field1_.on('data', this.trigger.bind(this, 'data'));
- this.field1_.on('done', this.trigger.bind(this, 'done'));
-};
-CaptionStream.prototype = new Stream();
-CaptionStream.prototype.push = function(event) {
- var sei, userData, captionPackets;
-
- // only examine SEI NALs
- if (event.nalUnitType !== 'sei_rbsp') {
- return;
- }
-
- // parse the sei
- sei = parseSei(event.escapedRBSP);
-
- // ignore everything but user_data_registered_itu_t_t35
- if (sei.payloadType !== USER_DATA_REGISTERED_ITU_T_T35) {
- return;
- }
-
- // parse out the user data payload
- userData = parseUserData(sei);
-
- // ignore unrecognized userData
- if (!userData) {
- return;
- }
-
- // parse out CC data packets and save them for later
- this.captionPackets_ = this.captionPackets_.concat(parseCaptionPackets(event.pts, userData));
-};
-
-CaptionStream.prototype.flush = function () {
- // make sure we actually parsed captions before proceeding
- if (!this.captionPackets_.length) {
- this.field1_.flush();
- return;
- }
-
- // sort caption byte-pairs based on their PTS values
- this.captionPackets_.sort(function(a, b) {
- return a.pts - b.pts;
- });
-
- // Push each caption into Cea608Stream
- this.captionPackets_.forEach(this.field1_.push, this.field1_);
-
- this.captionPackets_.length = 0;
- this.field1_.flush();
- return;
-};
-// ----------------------
-// Session to Application
-// ----------------------
-
-var BASIC_CHARACTER_TRANSLATION = {
- 0x2a: 0xe1,
- 0x5c: 0xe9,
- 0x5e: 0xed,
- 0x5f: 0xf3,
- 0x60: 0xfa,
- 0x7b: 0xe7,
- 0x7c: 0xf7,
- 0x7d: 0xd1,
- 0x7e: 0xf1,
- 0x7f: 0x2588
-};
-
-var getCharFromCode = function(code) {
- if(code === null) {
- return '';
- }
- code = BASIC_CHARACTER_TRANSLATION[code] || code;
- return String.fromCharCode(code);
-};
-
-// Constants for the byte codes recognized by Cea608Stream. This
-// list is not exhaustive. For a more comprehensive listing and
-// semantics see
-// http://www.gpo.gov/fdsys/pkg/CFR-2010-title47-vol1/pdf/CFR-2010-title47-vol1-sec15-119.pdf
-var PADDING = 0x0000,
-
- // Pop-on Mode
- RESUME_CAPTION_LOADING = 0x1420,
- END_OF_CAPTION = 0x142f,
-
- // Roll-up Mode
- ROLL_UP_2_ROWS = 0x1425,
- ROLL_UP_3_ROWS = 0x1426,
- ROLL_UP_4_ROWS = 0x1427,
- RESUME_DIRECT_CAPTIONING = 0x1429,
- CARRIAGE_RETURN = 0x142d,
- // Erasure
- BACKSPACE = 0x1421,
- ERASE_DISPLAYED_MEMORY = 0x142c,
- ERASE_NON_DISPLAYED_MEMORY = 0x142e;
-
-// the index of the last row in a CEA-608 display buffer
-var BOTTOM_ROW = 14;
-// CEA-608 captions are rendered onto a 34x15 matrix of character
-// cells. The "bottom" row is the last element in the outer array.
-var createDisplayBuffer = function() {
- var result = [], i = BOTTOM_ROW + 1;
- while (i--) {
- result.push('');
- }
- return result;
-};
-
-var Cea608Stream = function() {
- Cea608Stream.prototype.init.call(this);
-
- this.mode_ = 'popOn';
- // When in roll-up mode, the index of the last row that will
- // actually display captions. If a caption is shifted to a row
- // with a lower index than this, it is cleared from the display
- // buffer
- this.topRow_ = 0;
- this.startPts_ = 0;
- this.displayed_ = createDisplayBuffer();
- this.nonDisplayed_ = createDisplayBuffer();
- this.lastControlCode_ = null;
-
- this.push = function(packet) {
- // Ignore other channels
- if (packet.type !== 0) {
- return;
- }
- var data, swap, char0, char1;
- // remove the parity bits
- data = packet.ccData & 0x7f7f;
-
- // ignore duplicate control codes
- if (data === this.lastControlCode_) {
- this.lastControlCode_ = null;
- return;
- }
-
- // Store control codes
- if ((data & 0xf000) === 0x1000) {
- this.lastControlCode_ = data;
- } else {
- this.lastControlCode_ = null;
- }
-
- switch (data) {
- case PADDING:
- break;
- case RESUME_CAPTION_LOADING:
- this.mode_ = 'popOn';
- break;
- case END_OF_CAPTION:
- // if a caption was being displayed, it's gone now
- this.flushDisplayed(packet.pts);
-
- // flip memory
- swap = this.displayed_;
- this.displayed_ = this.nonDisplayed_;
- this.nonDisplayed_ = swap;
-
- // start measuring the time to display the caption
- this.startPts_ = packet.pts;
- break;
-
- case ROLL_UP_2_ROWS:
- this.topRow_ = BOTTOM_ROW - 1;
- this.mode_ = 'rollUp';
- break;
- case ROLL_UP_3_ROWS:
- this.topRow_ = BOTTOM_ROW - 2;
- this.mode_ = 'rollUp';
- break;
- case ROLL_UP_4_ROWS:
- this.topRow_ = BOTTOM_ROW - 3;
- this.mode_ = 'rollUp';
- break;
- case CARRIAGE_RETURN:
- this.flushDisplayed(packet.pts);
- this.shiftRowsUp_();
- this.startPts_ = packet.pts;
- break;
-
- case BACKSPACE:
- if (this.mode_ === 'popOn') {
- this.nonDisplayed_[BOTTOM_ROW] = this.nonDisplayed_[BOTTOM_ROW].slice(0, -1);
- } else {
- this.displayed_[BOTTOM_ROW] = this.displayed_[BOTTOM_ROW].slice(0, -1);
- }
- break;
- case ERASE_DISPLAYED_MEMORY:
- this.flushDisplayed(packet.pts);
- this.displayed_ = createDisplayBuffer();
- break;
- case ERASE_NON_DISPLAYED_MEMORY:
- this.nonDisplayed_ = createDisplayBuffer();
- break;
- default:
- char0 = data >>> 8;
- char1 = data & 0xff;
-
- // Look for a Channel 1 Preamble Address Code
- if (char0 >= 0x10 && char0 <= 0x17 &&
- char1 >= 0x40 && char1 <= 0x7F &&
- (char0 !== 0x10 || char1 < 0x60)) {
- // Follow Safari's lead and replace the PAC with a space
- char0 = 0x20;
- // we only want one space so make the second character null
- // which will get become '' in getCharFromCode
- char1 = null;
- }
-
- // Look for special character sets
- if ((char0 === 0x11 || char0 === 0x19) &&
- (char1 >= 0x30 && char1 <= 0x3F)) {
- // Put in eigth note and space
- char0 = 0xE299AA;
- char1 = '';
- }
-
- // ignore unsupported control codes
- if ((char0 & 0xf0) === 0x10) {
- return;
- }
-
- // character handling is dependent on the current mode
- this[this.mode_](packet.pts, char0, char1);
- break;
- }
- };
-};
-Cea608Stream.prototype = new Stream();
-// Trigger a cue point that captures the current state of the
-// display buffer
-Cea608Stream.prototype.flushDisplayed = function(pts) {
- var row, i;
-
- for (i = 0; i < this.displayed_.length; i++) {
- row = this.displayed_[i];
- if (row.length) {
- this.trigger('data', {
- startPts: this.startPts_,
- endPts: pts,
- // remove spaces from the start and end of the string
- text: row.trim()
- });
- }
- }
-};
-
-// Mode Implementations
-Cea608Stream.prototype.popOn = function(pts, char0, char1) {
- var baseRow = this.nonDisplayed_[BOTTOM_ROW];
-
- // buffer characters
- baseRow += getCharFromCode(char0);
- baseRow += getCharFromCode(char1);
- this.nonDisplayed_[BOTTOM_ROW] = baseRow;
-};
-
-Cea608Stream.prototype.rollUp = function(pts, char0, char1) {
- var baseRow = this.displayed_[BOTTOM_ROW];
- if (baseRow === '') {
- // we're starting to buffer new display input, so flush out the
- // current display
- this.flushDisplayed(pts);
-
- this.startPts_ = pts;
- }
-
- baseRow += getCharFromCode(char0);
- baseRow += getCharFromCode(char1);
-
- this.displayed_[BOTTOM_ROW] = baseRow;
-};
-Cea608Stream.prototype.shiftRowsUp_ = function() {
- var i;
- // clear out inactive rows
- for (i = 0; i < this.topRow_; i++) {
- this.displayed_[i] = '';
- }
- // shift displayed rows up
- for (i = this.topRow_; i < BOTTOM_ROW; i++) {
- this.displayed_[i] = this.displayed_[i + 1];
- }
- // clear out the bottom row
- this.displayed_[BOTTOM_ROW] = '';
-};
-
-// exports
-module.exports = {
- CaptionStream: CaptionStream,
- Cea608Stream: Cea608Stream,
-};
-
-
-},{"../utils/stream":49}],39:[function(require,module,exports){
-module.exports = require('./m2ts');
-
-},{"./m2ts":40}],40:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2015 Brightcove
- * All rights reserved.
- *
- * A stream-based mp2t to mp4 converter. This utility can be used to
- * deliver mp4s to a SourceBuffer on platforms that support native
- * Media Source Extensions.
- */
-'use strict';
-var Stream = require('../utils/stream.js'),
- CaptionStream = require('./caption-stream'),
- StreamTypes = require('./stream-types');
-
-var Stream = require('../utils/stream.js');
-var m2tsStreamTypes = require('./stream-types.js');
-
-// object types
-var
- TransportPacketStream, TransportParseStream, ElementaryStream,
- AacStream, H264Stream, NalByteStream;
-
-// constants
-var
- MP2T_PACKET_LENGTH = 188, // bytes
- SYNC_BYTE = 0x47,
-
-/**
- * Splits an incoming stream of binary data into MPEG-2 Transport
- * Stream packets.
- */
-TransportPacketStream = function() {
- var
- buffer = new Uint8Array(MP2T_PACKET_LENGTH),
- bytesInBuffer = 0;
-
- TransportPacketStream.prototype.init.call(this);
-
- // Deliver new bytes to the stream.
-
- this.push = function(bytes) {
- var
- i = 0,
- startIndex = 0,
- endIndex = MP2T_PACKET_LENGTH,
- everything;
-
- // If there are bytes remaining from the last segment, prepend them to the
- // bytes that were pushed in
- if (bytesInBuffer) {
- everything = new Uint8Array(bytes.byteLength + bytesInBuffer);
- everything.set(buffer.subarray(0, bytesInBuffer));
- everything.set(bytes, bytesInBuffer);
- bytesInBuffer = 0;
- } else {
- everything = bytes;
- }
-
- // While we have enough data for a packet
- while (endIndex < everything.byteLength) {
- // Look for a pair of start and end sync bytes in the data..
- if (everything[startIndex] === SYNC_BYTE && everything[endIndex] === SYNC_BYTE) {
- // We found a packet so emit it and jump one whole packet forward in
- // the stream
- this.trigger('data', everything.subarray(startIndex, endIndex));
- startIndex += MP2T_PACKET_LENGTH;
- endIndex += MP2T_PACKET_LENGTH;
- continue;
- }
- // If we get here, we have somehow become de-synchronized and we need to step
- // forward one byte at a time until we find a pair of sync bytes that denote
- // a packet
- startIndex++;
- endIndex++;
- }
-
- // If there was some data left over at the end of the segment that couldn't
- // possibly be a whole packet, keep it because it might be the start of a packet
- // that continues in the next segment
- if (startIndex < everything.byteLength) {
- buffer.set(everything.subarray(startIndex), 0);
- bytesInBuffer = everything.byteLength - startIndex;
- }
- };
-
- this.flush = function () {
- // If the buffer contains a whole packet when we are being flushed, emit it
- // and empty the buffer. Otherwise hold onto the data because it may be
- // important for decoding the next segment
- if (bytesInBuffer === MP2T_PACKET_LENGTH && buffer[0] === SYNC_BYTE) {
- this.trigger('data', buffer);
- bytesInBuffer = 0;
- }
- this.trigger('done');
- };
-};
-TransportPacketStream.prototype = new Stream();
-
-/**
- * Accepts an MP2T TransportPacketStream and emits data events with parsed
- * forms of the individual transport stream packets.
- */
-TransportParseStream = function() {
- var parsePsi, parsePat, parsePmt, parsePes, self;
- TransportParseStream.prototype.init.call(this);
- self = this;
-
- this.packetsWaitingForPmt = [];
- this.programMapTable = undefined;
-
- parsePsi = function(payload, psi) {
- var offset = 0;
-
- // PSI packets may be split into multiple sections and those
- // sections may be split into multiple packets. If a PSI
- // section starts in this packet, the payload_unit_start_indicator
- // will be true and the first byte of the payload will indicate
- // the offset from the current position to the start of the
- // section.
- if (psi.payloadUnitStartIndicator) {
- offset += payload[offset] + 1;
- }
-
- if (psi.type === 'pat') {
- parsePat(payload.subarray(offset), psi);
- } else {
- parsePmt(payload.subarray(offset), psi);
- }
- };
-
- parsePat = function(payload, pat) {
- pat.section_number = payload[7];
- pat.last_section_number = payload[8];
-
- // skip the PSI header and parse the first PMT entry
- self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];
- pat.pmtPid = self.pmtPid;
- };
-
- /**
- * Parse out the relevant fields of a Program Map Table (PMT).
- * @param payload {Uint8Array} the PMT-specific portion of an MP2T
- * packet. The first byte in this array should be the table_id
- * field.
- * @param pmt {object} the object that should be decorated with
- * fields parsed from the PMT.
- */
- parsePmt = function(payload, pmt) {
- var sectionLength, tableEnd, programInfoLength, offset;
-
- // PMTs can be sent ahead of the time when they should actually
- // take effect. We don't believe this should ever be the case
- // for HLS but we'll ignore "forward" PMT declarations if we see
- // them. Future PMT declarations have the current_next_indicator
- // set to zero.
- if (!(payload[5] & 0x01)) {
- return;
- }
-
- // overwrite any existing program map table
- self.programMapTable = {};
-
- // the mapping table ends at the end of the current section
- sectionLength = (payload[1] & 0x0f) << 8 | payload[2];
- tableEnd = 3 + sectionLength - 4;
-
- // to determine where the table is, we have to figure out how
- // long the program info descriptors are
- programInfoLength = (payload[10] & 0x0f) << 8 | payload[11];
-
- // advance the offset to the first entry in the mapping table
- offset = 12 + programInfoLength;
- while (offset < tableEnd) {
- // add an entry that maps the elementary_pid to the stream_type
- self.programMapTable[(payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]] = payload[offset];
-
- // move to the next table entry
- // skip past the elementary stream descriptors, if present
- offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;
- }
-
- // record the map on the packet as well
- pmt.programMapTable = self.programMapTable;
-
- // if there are any packets waiting for a PMT to be found, process them now
- while (self.packetsWaitingForPmt.length) {
- self.processPes_.apply(self, self.packetsWaitingForPmt.shift());
- }
- };
-
- /**
- * Deliver a new MP2T packet to the stream.
- */
- this.push = function(packet) {
- var
- result = {},
- offset = 4;
-
- result.payloadUnitStartIndicator = !!(packet[1] & 0x40);
-
- // pid is a 13-bit field starting at the last bit of packet[1]
- result.pid = packet[1] & 0x1f;
- result.pid <<= 8;
- result.pid |= packet[2];
-
- // if an adaption field is present, its length is specified by the
- // fifth byte of the TS packet header. The adaptation field is
- // used to add stuffing to PES packets that don't fill a complete
- // TS packet, and to specify some forms of timing and control data
- // that we do not currently use.
- if (((packet[3] & 0x30) >>> 4) > 0x01) {
- offset += packet[offset] + 1;
- }
-
- // parse the rest of the packet based on the type
- if (result.pid === 0) {
- result.type = 'pat';
- parsePsi(packet.subarray(offset), result);
- this.trigger('data', result);
- } else if (result.pid === this.pmtPid) {
- result.type = 'pmt';
- parsePsi(packet.subarray(offset), result);
- this.trigger('data', result);
- } else if (this.programMapTable === undefined) {
- // When we have not seen a PMT yet, defer further processing of
- // PES packets until one has been parsed
- this.packetsWaitingForPmt.push([packet, offset, result]);
- } else {
- this.processPes_(packet, offset, result);
- }
- };
-
- this.processPes_ = function (packet, offset, result) {
- result.streamType = this.programMapTable[result.pid];
- result.type = 'pes';
- result.data = packet.subarray(offset);
-
- this.trigger('data', result);
- };
-
-};
-TransportParseStream.prototype = new Stream();
-TransportParseStream.STREAM_TYPES = {
- h264: 0x1b,
- adts: 0x0f
-};
-
-/**
- * Reconsistutes program elementary stream (PES) packets from parsed
- * transport stream packets. That is, if you pipe an
- * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output
- * events will be events which capture the bytes for individual PES
- * packets plus relevant metadata that has been extracted from the
- * container.
- */
-ElementaryStream = function() {
- var
- // PES packet fragments
- video = {
- data: [],
- size: 0
- },
- audio = {
- data: [],
- size: 0
- },
- timedMetadata = {
- data: [],
- size: 0
- },
- parsePes = function(payload, pes) {
- var ptsDtsFlags;
-
- // find out if this packets starts a new keyframe
- pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0;
- // PES packets may be annotated with a PTS value, or a PTS value
- // and a DTS value. Determine what combination of values is
- // available to work with.
- ptsDtsFlags = payload[7];
-
- // PTS and DTS are normally stored as a 33-bit number. Javascript
- // performs all bitwise operations on 32-bit integers but javascript
- // supports a much greater range (52-bits) of integer using standard
- // mathematical operations.
- // We construct a 31-bit value using bitwise operators over the 31
- // most significant bits and then multiply by 4 (equal to a left-shift
- // of 2) before we add the final 2 least significant bits of the
- // timestamp (equal to an OR.)
- if (ptsDtsFlags & 0xC0) {
- // the PTS and DTS are not written out directly. For information
- // on how they are encoded, see
- // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html
- pes.pts = (payload[9] & 0x0E) << 27
- | (payload[10] & 0xFF) << 20
- | (payload[11] & 0xFE) << 12
- | (payload[12] & 0xFF) << 5
- | (payload[13] & 0xFE) >>> 3;
- pes.pts *= 4; // Left shift by 2
- pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs
- pes.dts = pes.pts;
- if (ptsDtsFlags & 0x40) {
- pes.dts = (payload[14] & 0x0E ) << 27
- | (payload[15] & 0xFF ) << 20
- | (payload[16] & 0xFE ) << 12
- | (payload[17] & 0xFF ) << 5
- | (payload[18] & 0xFE ) >>> 3;
- pes.dts *= 4; // Left shift by 2
- pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs
- }
- }
-
- // the data section starts immediately after the PES header.
- // pes_header_data_length specifies the number of header bytes
- // that follow the last byte of the field.
- pes.data = payload.subarray(9 + payload[8]);
- },
- flushStream = function(stream, type) {
- var
- packetData = new Uint8Array(stream.size),
- event = {
- type: type
- },
- i = 0,
- fragment;
-
- // do nothing if there is no buffered data
- if (!stream.data.length) {
- return;
- }
- event.trackId = stream.data[0].pid;
-
- // reassemble the packet
- while (stream.data.length) {
- fragment = stream.data.shift();
-
- packetData.set(fragment.data, i);
- i += fragment.data.byteLength;
- }
-
- // parse assembled packet's PES header
- parsePes(packetData, event);
-
- stream.size = 0;
-
- self.trigger('data', event);
- },
- self;
-
- ElementaryStream.prototype.init.call(this);
- self = this;
-
- this.push = function(data) {
- ({
- pat: function() {
- // we have to wait for the PMT to arrive as well before we
- // have any meaningful metadata
- },
- pes: function() {
- var stream, streamType;
-
- switch (data.streamType) {
- case StreamTypes.H264_STREAM_TYPE:
- case m2tsStreamTypes.H264_STREAM_TYPE:
- stream = video;
- streamType = 'video';
- break;
- case StreamTypes.ADTS_STREAM_TYPE:
- stream = audio;
- streamType = 'audio';
- break;
- case StreamTypes.METADATA_STREAM_TYPE:
- stream = timedMetadata;
- streamType = 'timed-metadata';
- break;
- default:
- // ignore unknown stream types
- return;
- }
-
- // if a new packet is starting, we can flush the completed
- // packet
- if (data.payloadUnitStartIndicator) {
- flushStream(stream, streamType);
- }
-
- // buffer this fragment until we are sure we've received the
- // complete payload
- stream.data.push(data);
- stream.size += data.data.byteLength;
- },
- pmt: function() {
- var
- event = {
- type: 'metadata',
- tracks: []
- },
- programMapTable = data.programMapTable,
- k,
- track;
-
- // translate streams to tracks
- for (k in programMapTable) {
- if (programMapTable.hasOwnProperty(k)) {
- track = {
- timelineStartInfo: {
- baseMediaDecodeTime: 0
- }
- };
- track.id = +k;
- if (programMapTable[k] === m2tsStreamTypes.H264_STREAM_TYPE) {
- track.codec = 'avc';
- track.type = 'video';
- } else if (programMapTable[k] === m2tsStreamTypes.ADTS_STREAM_TYPE) {
- track.codec = 'adts';
- track.type = 'audio';
- }
- event.tracks.push(track);
- }
- }
- self.trigger('data', event);
- }
- })[data.type]();
- };
-
- /**
- * Flush any remaining input. Video PES packets may be of variable
- * length. Normally, the start of a new video packet can trigger the
- * finalization of the previous packet. That is not possible if no
- * more video is forthcoming, however. In that case, some other
- * mechanism (like the end of the file) has to be employed. When it is
- * clear that no additional data is forthcoming, calling this method
- * will flush the buffered packets.
- */
- this.flush = function() {
- // !!THIS ORDER IS IMPORTANT!!
- // video first then audio
- flushStream(video, 'video');
- flushStream(audio, 'audio');
- flushStream(timedMetadata, 'timed-metadata');
- this.trigger('done');
- };
-};
-ElementaryStream.prototype = new Stream();
-
-var m2ts = {
- PAT_PID: 0x0000,
- MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH,
- TransportPacketStream: TransportPacketStream,
- TransportParseStream: TransportParseStream,
- ElementaryStream: ElementaryStream,
- CaptionStream: CaptionStream.CaptionStream,
- Cea608Stream: CaptionStream.Cea608Stream,
- MetadataStream: require('./metadata-stream'),
-};
-
-for (var type in StreamTypes) {
- if (StreamTypes.hasOwnProperty(type)) {
- m2ts[type] = StreamTypes[type];
- }
-}
-
-module.exports = m2ts;
-
-},{"../utils/stream.js":49,"./caption-stream":38,"./metadata-stream":41,"./stream-types":42,"./stream-types.js":42}],41:[function(require,module,exports){
-/**
- * Accepts program elementary stream (PES) data events and parses out
- * ID3 metadata from them, if present.
- * @see http://id3.org/id3v2.3.0
- */
-'use strict';
-var
- Stream = require('../utils/stream'),
- StreamTypes = require('./stream-types'),
- // return a percent-encoded representation of the specified byte range
- // @see http://en.wikipedia.org/wiki/Percent-encoding
- percentEncode = function(bytes, start, end) {
- var i, result = '';
- for (i = start; i < end; i++) {
- result += '%' + ('00' + bytes[i].toString(16)).slice(-2);
- }
- return result;
- },
- // return the string representation of the specified byte range,
- // interpreted as UTf-8.
- parseUtf8 = function(bytes, start, end) {
- return decodeURIComponent(percentEncode(bytes, start, end));
- },
- // return the string representation of the specified byte range,
- // interpreted as ISO-8859-1.
- parseIso88591 = function(bytes, start, end) {
- return unescape(percentEncode(bytes, start, end)); // jshint ignore:line
- },
- parseSyncSafeInteger = function (data) {
- return (data[0] << 21) |
- (data[1] << 14) |
- (data[2] << 7) |
- (data[3]);
- },
- tagParsers = {
- 'TXXX': function(tag) {
- var i;
- if (tag.data[0] !== 3) {
- // ignore frames with unrecognized character encodings
- return;
- }
-
- for (i = 1; i < tag.data.length; i++) {
- if (tag.data[i] === 0) {
- // parse the text fields
- tag.description = parseUtf8(tag.data, 1, i);
- // do not include the null terminator in the tag value
- tag.value = parseUtf8(tag.data, i + 1, tag.data.length - 1);
- break;
- }
- }
- tag.data = tag.value;
- },
- 'WXXX': function(tag) {
- var i;
- if (tag.data[0] !== 3) {
- // ignore frames with unrecognized character encodings
- return;
- }
-
- for (i = 1; i < tag.data.length; i++) {
- if (tag.data[i] === 0) {
- // parse the description and URL fields
- tag.description = parseUtf8(tag.data, 1, i);
- tag.url = parseUtf8(tag.data, i + 1, tag.data.length);
- break;
- }
- }
- },
- 'PRIV': function(tag) {
- var i;
-
- for (i = 0; i < tag.data.length; i++) {
- if (tag.data[i] === 0) {
- // parse the description and URL fields
- tag.owner = parseIso88591(tag.data, 0, i);
- break;
- }
- }
- tag.privateData = tag.data.subarray(i + 1);
- tag.data = tag.privateData;
- }
- },
- MetadataStream;
-
-MetadataStream = function(options) {
- var
- settings = {
- debug: !!(options && options.debug),
-
- // the bytes of the program-level descriptor field in MP2T
- // see ISO/IEC 13818-1:2013 (E), section 2.6 "Program and
- // program element descriptors"
- descriptor: options && options.descriptor
- },
- // the total size in bytes of the ID3 tag being parsed
- tagSize = 0,
- // tag data that is not complete enough to be parsed
- buffer = [],
- // the total number of bytes currently in the buffer
- bufferSize = 0,
- i;
-
- MetadataStream.prototype.init.call(this);
-
- // calculate the text track in-band metadata track dispatch type
- // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track
- this.dispatchType = StreamTypes.METADATA_STREAM_TYPE.toString(16);
- if (settings.descriptor) {
- for (i = 0; i < settings.descriptor.length; i++) {
- this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);
- }
- }
-
- this.push = function(chunk) {
- var tag, frameStart, frameSize, frame, i, frameHeader;
- if (chunk.type !== 'timed-metadata') {
- return;
- }
-
- // if data_alignment_indicator is set in the PES header,
- // we must have the start of a new ID3 tag. Assume anything
- // remaining in the buffer was malformed and throw it out
- if (chunk.dataAlignmentIndicator) {
- bufferSize = 0;
- buffer.length = 0;
- }
-
- // ignore events that don't look like ID3 data
- if (buffer.length === 0 &&
- (chunk.data.length < 10 ||
- chunk.data[0] !== 'I'.charCodeAt(0) ||
- chunk.data[1] !== 'D'.charCodeAt(0) ||
- chunk.data[2] !== '3'.charCodeAt(0))) {
- if (settings.debug) {
- console.log('Skipping unrecognized metadata packet');
- }
- return;
- }
-
- // add this chunk to the data we've collected so far
-
- buffer.push(chunk);
- bufferSize += chunk.data.byteLength;
-
- // grab the size of the entire frame from the ID3 header
- if (buffer.length === 1) {
- // the frame size is transmitted as a 28-bit integer in the
- // last four bytes of the ID3 header.
- // The most significant bit of each byte is dropped and the
- // results concatenated to recover the actual value.
- tagSize = parseSyncSafeInteger(chunk.data.subarray(6, 10));
-
- // ID3 reports the tag size excluding the header but it's more
- // convenient for our comparisons to include it
- tagSize += 10;
- }
-
- // if the entire frame has not arrived, wait for more data
- if (bufferSize < tagSize) {
- return;
- }
-
- // collect the entire frame so it can be parsed
- tag = {
- data: new Uint8Array(tagSize),
- frames: [],
- pts: buffer[0].pts,
- dts: buffer[0].dts
- };
- for (i = 0; i < tagSize;) {
- tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);
- i += buffer[0].data.byteLength;
- bufferSize -= buffer[0].data.byteLength;
- buffer.shift();
- }
-
- // find the start of the first frame and the end of the tag
- frameStart = 10;
- if (tag.data[5] & 0x40) {
- // advance the frame start past the extended header
- frameStart += 4; // header size field
- frameStart += parseSyncSafeInteger(tag.data.subarray(10, 14));
-
- // clip any padding off the end
- tagSize -= parseSyncSafeInteger(tag.data.subarray(16, 20));
- }
-
- // parse one or more ID3 frames
- // http://id3.org/id3v2.3.0#ID3v2_frame_overview
- do {
- // determine the number of bytes in this frame
- frameSize = parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8));
- if (frameSize < 1) {
- return console.log('Malformed ID3 frame encountered. Skipping metadata parsing.');
- }
- frameHeader = String.fromCharCode(tag.data[frameStart],
- tag.data[frameStart + 1],
- tag.data[frameStart + 2],
- tag.data[frameStart + 3]);
-
-
- frame = {
- id: frameHeader,
- data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)
- };
- frame.key = frame.id;
- if (tagParsers[frame.id]) {
- tagParsers[frame.id](frame);
- if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {
- var
- d = frame.data,
- size = ((d[3] & 0x01) << 30) |
- (d[4] << 22) |
- (d[5] << 14) |
- (d[6] << 6) |
- (d[7] >>> 2);
-
- size *= 4;
- size += d[7] & 0x03;
- frame.timeStamp = size;
- this.trigger('timestamp', frame);
- }
- }
- tag.frames.push(frame);
-
- frameStart += 10; // advance past the frame header
- frameStart += frameSize; // advance past the frame body
- } while (frameStart < tagSize);
- this.trigger('data', tag);
- };
-};
-MetadataStream.prototype = new Stream();
-
-module.exports = MetadataStream;
-
-},{"../utils/stream":49,"./stream-types":42}],42:[function(require,module,exports){
-'use strict';
-
-module.exports = {
- H264_STREAM_TYPE: 0x1B,
- ADTS_STREAM_TYPE: 0x0F,
- METADATA_STREAM_TYPE: 0x15
-};
-
-},{}],43:[function(require,module,exports){
-module.exports = {
- generator: require('./mp4-generator'),
- Transmuxer: require('./transmuxer').Transmuxer,
- AudioSegmentStream: require('./transmuxer').AudioSegmentStream,
- VideoSegmentStream: require('./transmuxer').VideoSegmentStream,
- tools: require('../tools/mp4-inspector'),
-};
-
-},{"../tools/mp4-inspector":47,"./mp4-generator":44,"./transmuxer":45}],44:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2015 Brightcove
- * All rights reserved.
- *
- * Functions that generate fragmented MP4s suitable for use with Media
- * Source Extensions.
- */
-'use strict';
-
-var box, dinf, esds, ftyp, mdat, mfhd, minf, moof, moov, mvex, mvhd, trak,
- tkhd, mdia, mdhd, hdlr, sdtp, stbl, stsd, styp, traf, trex, trun,
- types, MAJOR_BRAND, MINOR_VERSION, AVC1_BRAND, VIDEO_HDLR,
- AUDIO_HDLR, HDLR_TYPES, VMHD, SMHD, DREF, STCO, STSC, STSZ, STTS;
-
-// pre-calculate constants
-(function() {
- var i;
- types = {
- avc1: [], // codingname
- avcC: [],
- btrt: [],
- dinf: [],
- dref: [],
- esds: [],
- ftyp: [],
- hdlr: [],
- mdat: [],
- mdhd: [],
- mdia: [],
- mfhd: [],
- minf: [],
- moof: [],
- moov: [],
- mp4a: [], // codingname
- mvex: [],
- mvhd: [],
- sdtp: [],
- smhd: [],
- stbl: [],
- stco: [],
- stsc: [],
- stsd: [],
- stsz: [],
- stts: [],
- styp: [],
- tfdt: [],
- tfhd: [],
- traf: [],
- trak: [],
- trun: [],
- trex: [],
- tkhd: [],
- vmhd: []
- };
-
- for (i in types) {
- if (types.hasOwnProperty(i)) {
- types[i] = [
- i.charCodeAt(0),
- i.charCodeAt(1),
- i.charCodeAt(2),
- i.charCodeAt(3)
- ];
- }
- }
-
- MAJOR_BRAND = new Uint8Array([
- 'i'.charCodeAt(0),
- 's'.charCodeAt(0),
- 'o'.charCodeAt(0),
- 'm'.charCodeAt(0)
- ]);
- AVC1_BRAND = new Uint8Array([
- 'a'.charCodeAt(0),
- 'v'.charCodeAt(0),
- 'c'.charCodeAt(0),
- '1'.charCodeAt(0)
- ]);
- MINOR_VERSION = new Uint8Array([0, 0, 0, 1]);
- VIDEO_HDLR = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x00, // pre_defined
- 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x56, 0x69, 0x64, 0x65,
- 0x6f, 0x48, 0x61, 0x6e,
- 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'
- ]);
- AUDIO_HDLR = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x00, // pre_defined
- 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x53, 0x6f, 0x75, 0x6e,
- 0x64, 0x48, 0x61, 0x6e,
- 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'
- ]);
- HDLR_TYPES = {
- "video":VIDEO_HDLR,
- "audio": AUDIO_HDLR
- };
- DREF = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x01, // entry_count
- 0x00, 0x00, 0x00, 0x0c, // entry_size
- 0x75, 0x72, 0x6c, 0x20, // 'url' type
- 0x00, // version 0
- 0x00, 0x00, 0x01 // entry_flags
- ]);
- SMHD = new Uint8Array([
- 0x00, // version
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, // balance, 0 means centered
- 0x00, 0x00 // reserved
- ]);
- STCO = new Uint8Array([
- 0x00, // version
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x00 // entry_count
- ]);
- STSC = STCO;
- STSZ = new Uint8Array([
- 0x00, // version
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x00, // sample_size
- 0x00, 0x00, 0x00, 0x00, // sample_count
- ]);
- STTS = STCO;
- VMHD = new Uint8Array([
- 0x00, // version
- 0x00, 0x00, 0x01, // flags
- 0x00, 0x00, // graphicsmode
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00 // opcolor
- ]);
-})();
-
-box = function(type) {
- var
- payload = [],
- size = 0,
- i,
- result,
- view;
-
- for (i = 1; i < arguments.length; i++) {
- payload.push(arguments[i]);
- }
-
- i = payload.length;
-
- // calculate the total size we need to allocate
- while (i--) {
- size += payload[i].byteLength;
- }
- result = new Uint8Array(size + 8);
- view = new DataView(result.buffer, result.byteOffset, result.byteLength);
- view.setUint32(0, result.byteLength);
- result.set(type, 4);
-
- // copy the payload into the result
- for (i = 0, size = 8; i < payload.length; i++) {
- result.set(payload[i], size);
- size += payload[i].byteLength;
- }
- return result;
-};
-
-dinf = function() {
- return box(types.dinf, box(types.dref, DREF));
-};
-
-esds = function(track) {
- return box(types.esds, new Uint8Array([
- 0x00, // version
- 0x00, 0x00, 0x00, // flags
-
- // ES_Descriptor
- 0x03, // tag, ES_DescrTag
- 0x19, // length
- 0x00, 0x00, // ES_ID
- 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority
-
- // DecoderConfigDescriptor
- 0x04, // tag, DecoderConfigDescrTag
- 0x11, // length
- 0x40, // object type
- 0x15, // streamType
- 0x00, 0x06, 0x00, // bufferSizeDB
- 0x00, 0x00, 0xda, 0xc0, // maxBitrate
- 0x00, 0x00, 0xda, 0xc0, // avgBitrate
-
- // DecoderSpecificInfo
- 0x05, // tag, DecoderSpecificInfoTag
- 0x02, // length
- // ISO/IEC 14496-3, AudioSpecificConfig
- // for samplingFrequencyIndex see ISO/IEC 13818-7:2006, 8.1.3.2.2, Table 35
- (track.audioobjecttype << 3) | (track.samplingfrequencyindex >>> 1),
- (track.samplingfrequencyindex << 7) | (track.channelcount << 3),
- 0x06, 0x01, 0x02 // GASpecificConfig
- ]));
-};
-
-ftyp = function() {
- return box(types.ftyp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND, AVC1_BRAND);
-};
-
-hdlr = function(type) {
- return box(types.hdlr, HDLR_TYPES[type]);
-};
-mdat = function(data) {
- return box(types.mdat, data);
-};
-mdhd = function(track) {
- var result = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x02, // creation_time
- 0x00, 0x00, 0x00, 0x03, // modification_time
- 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 "ticks" per second
-
- (track.duration >>> 24) & 0xFF,
- (track.duration >>> 16) & 0xFF,
- (track.duration >>> 8) & 0xFF,
- track.duration & 0xFF, // duration
- 0x55, 0xc4, // 'und' language (undetermined)
- 0x00, 0x00
- ]);
-
- // Use the sample rate from the track metadata, when it is
- // defined. The sample rate can be parsed out of an ADTS header, for
- // instance.
- if (track.samplerate) {
- result[12] = (track.samplerate >>> 24) & 0xFF;
- result[13] = (track.samplerate >>> 16) & 0xFF;
- result[14] = (track.samplerate >>> 8) & 0xFF;
- result[15] = (track.samplerate) & 0xFF;
- }
-
- return box(types.mdhd, result);
-};
-mdia = function(track) {
- return box(types.mdia, mdhd(track), hdlr(track.type), minf(track));
-};
-mfhd = function(sequenceNumber) {
- return box(types.mfhd, new Uint8Array([
- 0x00,
- 0x00, 0x00, 0x00, // flags
- (sequenceNumber & 0xFF000000) >> 24,
- (sequenceNumber & 0xFF0000) >> 16,
- (sequenceNumber & 0xFF00) >> 8,
- sequenceNumber & 0xFF, // sequence_number
- ]));
-};
-minf = function(track) {
- return box(types.minf,
- track.type === 'video' ? box(types.vmhd, VMHD) : box(types.smhd, SMHD),
- dinf(),
- stbl(track));
-};
-moof = function(sequenceNumber, tracks) {
- var
- trackFragments = [],
- i = tracks.length;
- // build traf boxes for each track fragment
- while (i--) {
- trackFragments[i] = traf(tracks[i]);
- }
- return box.apply(null, [
- types.moof,
- mfhd(sequenceNumber)
- ].concat(trackFragments));
-};
-/**
- * Returns a movie box.
- * @param tracks {array} the tracks associated with this movie
- * @see ISO/IEC 14496-12:2012(E), section 8.2.1
- */
-moov = function(tracks) {
- var
- i = tracks.length,
- boxes = [];
-
- while (i--) {
- boxes[i] = trak(tracks[i]);
- }
-
- return box.apply(null, [types.moov, mvhd(0xffffffff)].concat(boxes).concat(mvex(tracks)));
-};
-mvex = function(tracks) {
- var
- i = tracks.length,
- boxes = [];
-
- while (i--) {
- boxes[i] = trex(tracks[i]);
- }
- return box.apply(null, [types.mvex].concat(boxes));
-};
-mvhd = function(duration) {
- var
- bytes = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x01, // creation_time
- 0x00, 0x00, 0x00, 0x02, // modification_time
- 0x00, 0x01, 0x5f, 0x90, // timescale, 90,000 "ticks" per second
- (duration & 0xFF000000) >> 24,
- (duration & 0xFF0000) >> 16,
- (duration & 0xFF00) >> 8,
- duration & 0xFF, // duration
- 0x00, 0x01, 0x00, 0x00, // 1.0 rate
- 0x01, 0x00, // 1.0 volume
- 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, // pre_defined
- 0xff, 0xff, 0xff, 0xff // next_track_ID
- ]);
- return box(types.mvhd, bytes);
-};
-
-sdtp = function(track) {
- var
- samples = track.samples || [],
- bytes = new Uint8Array(4 + samples.length),
- flags,
- i;
-
- // leave the full box header (4 bytes) all zero
-
- // write the sample table
- for (i = 0; i < samples.length; i++) {
- flags = samples[i].flags;
-
- bytes[i + 4] = (flags.dependsOn << 4) |
- (flags.isDependedOn << 2) |
- (flags.hasRedundancy);
- }
-
- return box(types.sdtp,
- bytes);
-};
-
-stbl = function(track) {
- return box(types.stbl,
- stsd(track),
- box(types.stts, STTS),
- box(types.stsc, STSC),
- box(types.stsz, STSZ),
- box(types.stco, STCO));
-};
-
-(function() {
- var videoSample, audioSample;
-
- stsd = function(track) {
-
- return box(types.stsd, new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- 0x00, 0x00, 0x00, 0x01
- ]), track.type === 'video' ? videoSample(track) : audioSample(track));
- };
-
- videoSample = function(track) {
- var
- sps = track.sps || [],
- pps = track.pps || [],
- sequenceParameterSets = [],
- pictureParameterSets = [],
- i;
-
- // assemble the SPSs
- for (i = 0; i < sps.length; i++) {
- sequenceParameterSets.push((sps[i].byteLength & 0xFF00) >>> 8);
- sequenceParameterSets.push((sps[i].byteLength & 0xFF)); // sequenceParameterSetLength
- sequenceParameterSets = sequenceParameterSets.concat(Array.prototype.slice.call(sps[i])); // SPS
- }
-
- // assemble the PPSs
- for (i = 0; i < pps.length; i++) {
- pictureParameterSets.push((pps[i].byteLength & 0xFF00) >>> 8);
- pictureParameterSets.push((pps[i].byteLength & 0xFF));
- pictureParameterSets = pictureParameterSets.concat(Array.prototype.slice.call(pps[i]));
- }
-
- return box(types.avc1, new Uint8Array([
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, // reserved
- 0x00, 0x01, // data_reference_index
- 0x00, 0x00, // pre_defined
- 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, // pre_defined
- (track.width & 0xff00) >> 8,
- track.width & 0xff, // width
- (track.height & 0xff00) >> 8,
- track.height & 0xff, // height
- 0x00, 0x48, 0x00, 0x00, // horizresolution
- 0x00, 0x48, 0x00, 0x00, // vertresolution
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x01, // frame_count
- 0x13,
- 0x76, 0x69, 0x64, 0x65,
- 0x6f, 0x6a, 0x73, 0x2d,
- 0x63, 0x6f, 0x6e, 0x74,
- 0x72, 0x69, 0x62, 0x2d,
- 0x68, 0x6c, 0x73, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, // compressorname
- 0x00, 0x18, // depth = 24
- 0x11, 0x11 // pre_defined = -1
- ]), box(types.avcC, new Uint8Array([
- 0x01, // configurationVersion
- track.profileIdc, // AVCProfileIndication
- track.profileCompatibility, // profile_compatibility
- track.levelIdc, // AVCLevelIndication
- 0xff // lengthSizeMinusOne, hard-coded to 4 bytes
- ].concat([
- sps.length // numOfSequenceParameterSets
- ]).concat(sequenceParameterSets).concat([
- pps.length // numOfPictureParameterSets
- ]).concat(pictureParameterSets))), // "PPS"
- box(types.btrt, new Uint8Array([
- 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB
- 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate
- 0x00, 0x2d, 0xc6, 0xc0
- ])) // avgBitrate
- );
- };
-
- audioSample = function(track) {
- return box(types.mp4a, new Uint8Array([
-
- // SampleEntry, ISO/IEC 14496-12
- 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, // reserved
- 0x00, 0x01, // data_reference_index
-
- // AudioSampleEntry, ISO/IEC 14496-12
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, 0x00, 0x00, // reserved
- (track.channelcount & 0xff00) >> 8,
- (track.channelcount & 0xff), // channelcount
-
- (track.samplesize & 0xff00) >> 8,
- (track.samplesize & 0xff), // samplesize
- 0x00, 0x00, // pre_defined
- 0x00, 0x00, // reserved
-
- (track.samplerate & 0xff00) >> 8,
- (track.samplerate & 0xff),
- 0x00, 0x00 // samplerate, 16.16
-
- // MP4AudioSampleEntry, ISO/IEC 14496-14
- ]), esds(track));
- };
-})();
-
-styp = function() {
- return box(types.styp, MAJOR_BRAND, MINOR_VERSION, MAJOR_BRAND);
-};
-
-tkhd = function(track) {
- var result = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x07, // flags
- 0x00, 0x00, 0x00, 0x00, // creation_time
- 0x00, 0x00, 0x00, 0x00, // modification_time
- (track.id & 0xFF000000) >> 24,
- (track.id & 0xFF0000) >> 16,
- (track.id & 0xFF00) >> 8,
- track.id & 0xFF, // track_ID
- 0x00, 0x00, 0x00, 0x00, // reserved
- (track.duration & 0xFF000000) >> 24,
- (track.duration & 0xFF0000) >> 16,
- (track.duration & 0xFF00) >> 8,
- track.duration & 0xFF, // duration
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, // reserved
- 0x00, 0x00, // layer
- 0x00, 0x00, // alternate_group
- 0x01, 0x00, // non-audio track volume
- 0x00, 0x00, // reserved
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix
- (track.width & 0xFF00) >> 8,
- track.width & 0xFF,
- 0x00, 0x00, // width
- (track.height & 0xFF00) >> 8,
- track.height & 0xFF,
- 0x00, 0x00 // height
- ]);
-
- return box(types.tkhd, result);
-};
-
-/**
- * Generate a track fragment (traf) box. A traf box collects metadata
- * about tracks in a movie fragment (moof) box.
- */
-traf = function(track) {
- var trackFragmentHeader, trackFragmentDecodeTime,
- trackFragmentRun, sampleDependencyTable, dataOffset;
-
- trackFragmentHeader = box(types.tfhd, new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x3a, // flags
- (track.id & 0xFF000000) >> 24,
- (track.id & 0xFF0000) >> 16,
- (track.id & 0xFF00) >> 8,
- (track.id & 0xFF), // track_ID
- 0x00, 0x00, 0x00, 0x01, // sample_description_index
- 0x00, 0x00, 0x00, 0x00, // default_sample_duration
- 0x00, 0x00, 0x00, 0x00, // default_sample_size
- 0x00, 0x00, 0x00, 0x00 // default_sample_flags
- ]));
-
- trackFragmentDecodeTime = box(types.tfdt, new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- // baseMediaDecodeTime
- (track.baseMediaDecodeTime >>> 24) & 0xFF,
- (track.baseMediaDecodeTime >>> 16) & 0xFF,
- (track.baseMediaDecodeTime >>> 8) & 0xFF,
- track.baseMediaDecodeTime & 0xFF
- ]));
-
- // the data offset specifies the number of bytes from the start of
- // the containing moof to the first payload byte of the associated
- // mdat
- dataOffset = (32 + // tfhd
- 16 + // tfdt
- 8 + // traf header
- 16 + // mfhd
- 8 + // moof header
- 8); // mdat header
-
- // audio tracks require less metadata
- if (track.type === 'audio') {
- trackFragmentRun = trun(track, dataOffset);
- return box(types.traf,
- trackFragmentHeader,
- trackFragmentDecodeTime,
- trackFragmentRun);
- }
-
- // video tracks should contain an independent and disposable samples
- // box (sdtp)
- // generate one and adjust offsets to match
- sampleDependencyTable = sdtp(track);
- trackFragmentRun = trun(track,
- sampleDependencyTable.length + dataOffset);
- return box(types.traf,
- trackFragmentHeader,
- trackFragmentDecodeTime,
- trackFragmentRun,
- sampleDependencyTable);
-};
-
-/**
- * Generate a track box.
- * @param track {object} a track definition
- * @return {Uint8Array} the track box
- */
-trak = function(track) {
- track.duration = track.duration || 0xffffffff;
- return box(types.trak,
- tkhd(track),
- mdia(track));
-};
-
-trex = function(track) {
- var result = new Uint8Array([
- 0x00, // version 0
- 0x00, 0x00, 0x00, // flags
- (track.id & 0xFF000000) >> 24,
- (track.id & 0xFF0000) >> 16,
- (track.id & 0xFF00) >> 8,
- (track.id & 0xFF), // track_ID
- 0x00, 0x00, 0x00, 0x01, // default_sample_description_index
- 0x00, 0x00, 0x00, 0x00, // default_sample_duration
- 0x00, 0x00, 0x00, 0x00, // default_sample_size
- 0x00, 0x01, 0x00, 0x01 // default_sample_flags
- ]);
- // the last two bytes of default_sample_flags is the sample
- // degradation priority, a hint about the importance of this sample
- // relative to others. Lower the degradation priority for all sample
- // types other than video.
- if (track.type !== 'video') {
- result[result.length - 1] = 0x00;
- }
-
- return box(types.trex, result);
-};
-
-(function() {
- var audioTrun, videoTrun, trunHeader;
-
- // This method assumes all samples are uniform. That is, if a
- // duration is present for the first sample, it will be present for
- // all subsequent samples.
- // see ISO/IEC 14496-12:2012, Section 8.8.8.1
- trunHeader = function(samples, offset) {
- var durationPresent = 0, sizePresent = 0,
- flagsPresent = 0, compositionTimeOffset = 0;
-
- // trun flag constants
- if (samples.length) {
- if (samples[0].duration !== undefined) {
- durationPresent = 0x1;
- }
- if (samples[0].size !== undefined) {
- sizePresent = 0x2;
- }
- if (samples[0].flags !== undefined) {
- flagsPresent = 0x4;
- }
- if (samples[0].compositionTimeOffset !== undefined) {
- compositionTimeOffset = 0x8;
- }
- }
-
- return [
- 0x00, // version 0
- 0x00,
- durationPresent | sizePresent | flagsPresent | compositionTimeOffset,
- 0x01, // flags
- (samples.length & 0xFF000000) >>> 24,
- (samples.length & 0xFF0000) >>> 16,
- (samples.length & 0xFF00) >>> 8,
- samples.length & 0xFF, // sample_count
- (offset & 0xFF000000) >>> 24,
- (offset & 0xFF0000) >>> 16,
- (offset & 0xFF00) >>> 8,
- offset & 0xFF // data_offset
- ];
- };
-
- videoTrun = function(track, offset) {
- var bytes, samples, sample, i;
-
- samples = track.samples || [];
- offset += 8 + 12 + (16 * samples.length);
-
- bytes = trunHeader(samples, offset);
-
- for (i = 0; i < samples.length; i++) {
- sample = samples[i];
- bytes = bytes.concat([
- (sample.duration & 0xFF000000) >>> 24,
- (sample.duration & 0xFF0000) >>> 16,
- (sample.duration & 0xFF00) >>> 8,
- sample.duration & 0xFF, // sample_duration
- (sample.size & 0xFF000000) >>> 24,
- (sample.size & 0xFF0000) >>> 16,
- (sample.size & 0xFF00) >>> 8,
- sample.size & 0xFF, // sample_size
- (sample.flags.isLeading << 2) | sample.flags.dependsOn,
- (sample.flags.isDependedOn << 6) |
- (sample.flags.hasRedundancy << 4) |
- (sample.flags.paddingValue << 1) |
- sample.flags.isNonSyncSample,
- sample.flags.degradationPriority & 0xF0 << 8,
- sample.flags.degradationPriority & 0x0F, // sample_flags
- (sample.compositionTimeOffset & 0xFF000000) >>> 24,
- (sample.compositionTimeOffset & 0xFF0000) >>> 16,
- (sample.compositionTimeOffset & 0xFF00) >>> 8,
- sample.compositionTimeOffset & 0xFF // sample_composition_time_offset
- ]);
- }
- return box(types.trun, new Uint8Array(bytes));
- };
-
- audioTrun = function(track, offset) {
- var bytes, samples, sample, i;
-
- samples = track.samples || [];
- offset += 8 + 12 + (8 * samples.length);
-
- bytes = trunHeader(samples, offset);
-
- for (i = 0; i < samples.length; i++) {
- sample = samples[i];
- bytes = bytes.concat([
- (sample.duration & 0xFF000000) >>> 24,
- (sample.duration & 0xFF0000) >>> 16,
- (sample.duration & 0xFF00) >>> 8,
- sample.duration & 0xFF, // sample_duration
- (sample.size & 0xFF000000) >>> 24,
- (sample.size & 0xFF0000) >>> 16,
- (sample.size & 0xFF00) >>> 8,
- sample.size & 0xFF]); // sample_size
- }
-
- return box(types.trun, new Uint8Array(bytes));
- };
-
- trun = function(track, offset) {
- if (track.type === 'audio') {
- return audioTrun(track, offset);
- } else {
- return videoTrun(track, offset);
- }
- };
-})();
-
-module.exports = {
- ftyp: ftyp,
- mdat: mdat,
- moof: moof,
- moov: moov,
- initSegment: function(tracks) {
- var
- fileType = ftyp(),
- movie = moov(tracks),
- result;
-
- result = new Uint8Array(fileType.byteLength + movie.byteLength);
- result.set(fileType);
- result.set(movie, fileType.byteLength);
- return result;
- }
-};
-
-},{}],45:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2015 Brightcove
- * All rights reserved.
- *
- * A stream-based mp2t to mp4 converter. This utility can be used to
- * deliver mp4s to a SourceBuffer on platforms that support native
- * Media Source Extensions.
- */
-'use strict';
-
-var Stream = require('../utils/stream.js');
-var mp4 = require('./mp4-generator.js');
-var m2ts = require('../m2ts/m2ts.js');
-var AdtsStream = require('../codecs/adts.js');
-var H264Stream = require('../codecs/h264').H264Stream;
-var AacStream = require('../aac');
-
-// object types
-var VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;
-
-// Helper functions
-var
- defaultSample,
- collectDtsInfo,
- clearDtsInfo,
- calculateTrackBaseMediaDecodeTime,
- arrayEquals,
- sumFrameByteLengths;
-
-/**
- * Default sample object
- * see ISO/IEC 14496-12:2012, section 8.6.4.3
- */
-defaultSample = {
- size: 0,
- flags: {
- isLeading: 0,
- dependsOn: 1,
- isDependedOn: 0,
- hasRedundancy: 0,
- degradationPriority: 0
- }
-};
-
-/**
- * Compare two arrays (even typed) for same-ness
- */
-arrayEquals = function(a, b) {
- var
- i;
-
- if (a.length !== b.length) {
- return false;
- }
-
- // compare the value of each element in the array
- for (i = 0; i < a.length; i++) {
- if (a[i] !== b[i]) {
- return false;
- }
- }
-
- return true;
-};
-
-/**
- * Sum the `byteLength` properties of the data in each AAC frame
- */
-sumFrameByteLengths = function(array) {
- var
- i,
- currentObj,
- sum = 0;
-
- // sum the byteLength's all each nal unit in the frame
- for (i = 0; i < array.length; i++) {
- currentObj = array[i];
- sum += currentObj.data.byteLength;
- }
-
- return sum;
-};
-
-/**
- * Constructs a single-track, ISO BMFF media segment from AAC data
- * events. The output of this stream can be fed to a SourceBuffer
- * configured with a suitable initialization segment.
- */
-AudioSegmentStream = function(track) {
- var
- adtsFrames = [],
- sequenceNumber = 0,
- earliestAllowedDts = 0;
-
- AudioSegmentStream.prototype.init.call(this);
-
- this.push = function(data) {
- collectDtsInfo(track, data);
-
- if (track) {
- track.audioobjecttype = data.audioobjecttype;
- track.channelcount = data.channelcount;
- track.samplerate = data.samplerate;
- track.samplingfrequencyindex = data.samplingfrequencyindex;
- track.samplesize = data.samplesize;
- }
-
- // buffer audio data until end() is called
- adtsFrames.push(data);
- };
-
- this.setEarliestDts = function(earliestDts) {
- earliestAllowedDts = earliestDts - track.timelineStartInfo.baseMediaDecodeTime;
- };
-
- this.flush = function() {
- var
- frames,
- moof,
- mdat,
- boxes;
-
- // return early if no audio data has been observed
- if (adtsFrames.length === 0) {
- this.trigger('done');
- return;
- }
-
- frames = this.trimAdtsFramesByEarliestDts_(adtsFrames);
-
- // we have to build the index from byte locations to
- // samples (that is, adts frames) in the audio data
- track.samples = this.generateSampleTable_(frames);
-
- // concatenate the audio data to constuct the mdat
- mdat = mp4.mdat(this.concatenateFrameData_(frames));
-
- adtsFrames = [];
-
- calculateTrackBaseMediaDecodeTime(track);
- moof = mp4.moof(sequenceNumber, [track]);
- boxes = new Uint8Array(moof.byteLength + mdat.byteLength);
-
- // bump the sequence number for next time
- sequenceNumber++;
-
- boxes.set(moof);
- boxes.set(mdat, moof.byteLength);
-
- clearDtsInfo(track);
-
- this.trigger('data', {track: track, boxes: boxes});
- this.trigger('done');
- };
-
- // If the audio segment extends before the earliest allowed dts
- // value, remove AAC frames until starts at or after the earliest
- // allowed DTS so that we don't end up with a negative baseMedia-
- // DecodeTime for the audio track
- this.trimAdtsFramesByEarliestDts_ = function(adtsFrames) {
- if (track.minSegmentDts >= earliestAllowedDts) {
- return adtsFrames;
- }
-
- // We will need to recalculate the earliest segment Dts
- track.minSegmentDts = Infinity;
-
- return adtsFrames.filter(function(currentFrame) {
- // If this is an allowed frame, keep it and record it's Dts
- if (currentFrame.dts >= earliestAllowedDts) {
- track.minSegmentDts = Math.min(track.minSegmentDts, currentFrame.dts);
- track.minSegmentPts = track.minSegmentDts;
- return true;
- }
- // Otherwise, discard it
- return false;
- });
- };
-
- // generate the track's raw mdat data from an array of frames
- this.generateSampleTable_ = function(frames) {
- var
- i,
- currentFrame,
- samples = [];
-
- for (i = 0; i < frames.length; i++) {
- currentFrame = frames[i];
- samples.push({
- size: currentFrame.data.byteLength,
- duration: 1024 // For AAC audio, all samples contain 1024 samples
- });
- }
- return samples;
- };
-
- // generate the track's sample table from an array of frames
- this.concatenateFrameData_ = function(frames) {
- var
- i,
- currentFrame,
- dataOffset = 0,
- data = new Uint8Array(sumFrameByteLengths(frames));
-
- for (i = 0; i < frames.length; i++) {
- currentFrame = frames[i];
-
- data.set(currentFrame.data, dataOffset);
- dataOffset += currentFrame.data.byteLength;
- }
- return data;
- };
-};
-
-AudioSegmentStream.prototype = new Stream();
-
-/**
- * Constructs a single-track, ISO BMFF media segment from H264 data
- * events. The output of this stream can be fed to a SourceBuffer
- * configured with a suitable initialization segment.
- * @param track {object} track metadata configuration
- */
-VideoSegmentStream = function(track) {
- var
- sequenceNumber = 0,
- nalUnits = [],
- config,
- pps;
-
- VideoSegmentStream.prototype.init.call(this);
-
- delete track.minPTS;
-
- this.gopCache_ = [];
-
- this.push = function(nalUnit) {
- collectDtsInfo(track, nalUnit);
-
- // record the track config
- if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' &&
- !config) {
- config = nalUnit.config;
-
- track.width = config.width;
- track.height = config.height;
- track.sps = [nalUnit.data];
- track.profileIdc = config.profileIdc;
- track.levelIdc = config.levelIdc;
- track.profileCompatibility = config.profileCompatibility;
- }
-
- if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' &&
- !pps) {
- pps = nalUnit.data;
- track.pps = [nalUnit.data];
- }
-
- // buffer video until flush() is called
- nalUnits.push(nalUnit);
- };
-
- this.flush = function() {
- var
- frames,
- gopForFusion,
- gops,
- moof,
- mdat,
- boxes;
-
- // Throw away nalUnits at the start of the byte stream until
- // we find the first AUD
- while (nalUnits.length) {
- if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {
- break;
- }
- nalUnits.shift();
- }
-
- // Return early if no video data has been observed
- if (nalUnits.length === 0) {
- this.resetStream_();
- this.trigger('done');
- return;
- }
-
- // Organize the raw nal-units into arrays that represent
- // higher-level constructs such as frames and gops
- // (group-of-pictures)
- frames = this.groupNalsIntoFrames_(nalUnits);
- gops = this.groupFramesIntoGops_(frames);
-
- // If the first frame of this fragment is not a keyframe we have
- // a problem since MSE (on Chrome) requires a leading keyframe.
- //
- // We have two approaches to repairing this situation:
- // 1) GOP-FUSION:
- // This is where we keep track of the GOPS (group-of-pictures)
- // from previous fragments and attempt to find one that we can
- // prepend to the current fragment in order to create a valid
- // fragment.
- // 2) KEYFRAME-PULLING:
- // Here we search for the first keyframe in the fragment and
- // throw away all the frames between the start of the fragment
- // and that keyframe. We then extend the duration and pull the
- // PTS of the keyframe forward so that it covers the time range
- // of the frames that were disposed of.
- //
- // #1 is far prefereable over #2 which can cause "stuttering" but
- // requires more things to be just right.
- if (!gops[0][0].keyFrame) {
- // Search for a gop for fusion from our gopCache
- gopForFusion = this.getGopForFusion_(nalUnits[0], track);
-
- if (gopForFusion) {
- gops.unshift(gopForFusion);
- // Adjust Gops' metadata to account for the inclusion of the
- // new gop at the beginning
- gops.byteLength += gopForFusion.byteLength;
- gops.nalCount += gopForFusion.nalCount;
- gops.pts = gopForFusion.pts;
- gops.dts = gopForFusion.dts;
- gops.duration += gopForFusion.duration;
- } else {
- // If we didn't find a candidate gop fall back to keyrame-pulling
- gops = this.extendFirstKeyFrame_(gops);
- }
- }
- collectDtsInfo(track, gops);
-
- // First, we have to build the index from byte locations to
- // samples (that is, frames) in the video data
- track.samples = this.generateSampleTable_(gops);
-
- // Concatenate the video data and construct the mdat
- mdat = mp4.mdat(this.concatenateNalData_(gops));
-
- // save all the nals in the last GOP into the gop cache
- this.gopCache_.unshift({
- gop: gops.pop(),
- pps: track.pps,
- sps: track.sps
- });
-
- // Keep a maximum of 6 GOPs in the cache
- this.gopCache_.length = Math.min(6, this.gopCache_.length);
-
- // Clear nalUnits
- nalUnits = [];
-
- calculateTrackBaseMediaDecodeTime(track);
-
- this.trigger('timelineStartInfo', track.timelineStartInfo);
-
- moof = mp4.moof(sequenceNumber, [track]);
-
- // it would be great to allocate this array up front instead of
- // throwing away hundreds of media segment fragments
- boxes = new Uint8Array(moof.byteLength + mdat.byteLength);
-
- // Bump the sequence number for next time
- sequenceNumber++;
-
- boxes.set(moof);
- boxes.set(mdat, moof.byteLength);
-
- this.trigger('data', {track: track, boxes: boxes});
-
- this.resetStream_();
-
- // Continue with the flush process now
- this.trigger('done');
- };
-
- this.resetStream_ = function() {
- clearDtsInfo(track);
-
- // reset config and pps because they may differ across segments
- // for instance, when we are rendition switching
- config = undefined;
- pps = undefined;
- };
-
- // Search for a candidate Gop for gop-fusion from the gop cache and
- // return it or return null if no good candidate was found
- this.getGopForFusion_ = function (nalUnit) {
- var
- halfSecond = 45000, // Half-a-second in a 90khz clock
- allowableOverlap = 10000, // About 3 frames @ 30fps
- nearestDistance = Infinity,
- dtsDistance,
- nearestGopObj,
- currentGop,
- currentGopObj,
- i;
-
- // Search for the GOP nearest to the beginning of this nal unit
- for (i = 0; i < this.gopCache_.length; i++) {
- currentGopObj = this.gopCache_[i];
- currentGop = currentGopObj.gop;
-
- // Reject Gops with different SPS or PPS
- if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) ||
- !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {
- continue;
- }
-
- // Reject Gops that would require a negative baseMediaDecodeTime
- if (currentGop.dts < track.timelineStartInfo.dts) {
- continue;
- }
-
- // The distance between the end of the gop and the start of the nalUnit
- dtsDistance = (nalUnit.dts - currentGop.dts) - currentGop.duration;
-
- // Only consider GOPS that start before the nal unit and end within
- // a half-second of the nal unit
- if (dtsDistance >= -allowableOverlap &&
- dtsDistance <= halfSecond) {
-
- // Always use the closest GOP we found if there is more than
- // one candidate
- if (!nearestGopObj ||
- nearestDistance > dtsDistance) {
- nearestGopObj = currentGopObj;
- nearestDistance = dtsDistance;
- }
- }
- }
-
- if (nearestGopObj) {
- return nearestGopObj.gop;
- }
- return null;
- };
-
- this.extendFirstKeyFrame_ = function(gops) {
- var
- h, i,
- currentGop,
- newGops;
-
- if (!gops[0][0].keyFrame) {
- // Remove the first GOP
- currentGop = gops.shift();
-
- gops.byteLength -= currentGop.byteLength;
- gops.nalCount -= currentGop.nalCount;
-
- // Extend the first frame of what is now the
- // first gop to cover the time period of the
- // frames we just removed
- gops[0][0].dts = currentGop.dts;
- gops[0][0].pts = currentGop.pts;
- gops[0][0].duration += currentGop.duration;
- }
-
- return gops;
- };
-
- // Convert an array of nal units into an array of frames with each frame being
- // composed of the nal units that make up that frame
- // Also keep track of cummulative data about the frame from the nal units such
- // as the frame duration, starting pts, etc.
- this.groupNalsIntoFrames_ = function(nalUnits) {
- var
- i,
- currentNal,
- startPts,
- startDts,
- currentFrame = [],
- frames = [];
-
- currentFrame.byteLength = 0;
-
- for (i = 0; i < nalUnits.length; i++) {
- currentNal = nalUnits[i];
-
- // Split on 'aud'-type nal units
- if (currentNal.nalUnitType === 'access_unit_delimiter_rbsp') {
- // Since the very first nal unit is expected to be an AUD
- // only push to the frames array when currentFrame is not empty
- if (currentFrame.length) {
- currentFrame.duration = currentNal.dts - currentFrame.dts;
- frames.push(currentFrame);
- }
- currentFrame = [currentNal];
- currentFrame.byteLength = currentNal.data.byteLength;
- currentFrame.pts = currentNal.pts;
- currentFrame.dts = currentNal.dts;
- } else {
- // Specifically flag key frames for ease of use later
- if (currentNal.nalUnitType === 'slice_layer_without_partitioning_rbsp_idr') {
- currentFrame.keyFrame = true;
- }
- currentFrame.duration = currentNal.dts - currentFrame.dts;
- currentFrame.byteLength += currentNal.data.byteLength;
- currentFrame.push(currentNal);
- }
- }
-
- // For the last frame, use the duration of the previous frame if we
- // have nothing better to go on
- if (frames.length &&
- !currentFrame.duration ||
- currentFrame.duration <= 0) {
- currentFrame.duration = frames[frames.length - 1].duration;
- }
-
- // Push the final frame
- frames.push(currentFrame);
- return frames;
- };
-
- // Convert an array of frames into an array of Gop with each Gop being composed
- // of the frames that make up that Gop
- // Also keep track of cummulative data about the Gop from the frames such as the
- // Gop duration, starting pts, etc.
- this.groupFramesIntoGops_ = function(frames) {
- var
- i,
- currentFrame,
- currentGop = [],
- gops = [];
-
- // We must pre-set some of the values on the Gop since we
- // keep running totals of these values
- currentGop.byteLength = 0;
- currentGop.nalCount = 0;
- currentGop.duration = 0;
- currentGop.pts = frames[0].pts;
- currentGop.dts = frames[0].dts;
-
- // store some metadata about all the Gops
- gops.byteLength = 0;
- gops.nalCount = 0;
- gops.duration = 0;
- gops.pts = frames[0].pts;
- gops.dts = frames[0].dts;
-
- for (i = 0; i < frames.length; i++) {
- currentFrame = frames[i];
-
- if (currentFrame.keyFrame) {
- // Since the very first frame is expected to be an keyframe
- // only push to the gops array when currentGop is not empty
- if (currentGop.length) {
- gops.push(currentGop);
- gops.byteLength += currentGop.byteLength;
- gops.nalCount += currentGop.nalCount;
- gops.duration += currentGop.duration;
- }
-
- currentGop = [currentFrame];
- currentGop.nalCount = currentFrame.length;
- currentGop.byteLength = currentFrame.byteLength;
- currentGop.pts = currentFrame.pts;
- currentGop.dts = currentFrame.dts;
- currentGop.duration = currentFrame.duration;
- } else {
- currentGop.duration += currentFrame.duration;
- currentGop.nalCount += currentFrame.length;
- currentGop.byteLength += currentFrame.byteLength;
- currentGop.push(currentFrame);
- }
- }
-
- if (gops.length && currentGop.duration <= 0) {
- currentGop.duration = gops[gops.length - 1].duration;
- }
- gops.byteLength += currentGop.byteLength;
- gops.nalCount += currentGop.nalCount;
- gops.duration += currentGop.duration;
-
- // push the final Gop
- gops.push(currentGop);
- return gops;
- };
-
- // generate the track's sample table from an array of gops
- this.generateSampleTable_ = function(gops, baseDataOffset) {
- var
- h, i,
- sample,
- currentGop,
- currentFrame,
- currentSample,
- dataOffset = baseDataOffset || 0,
- samples = [];
-
- for (h = 0; h < gops.length; h++) {
- currentGop = gops[h];
-
- for (i = 0; i < currentGop.length; i++) {
- currentFrame = currentGop[i];
-
- sample = Object.create(defaultSample);
-
- sample.dataOffset = dataOffset;
- sample.compositionTimeOffset = currentFrame.pts - currentFrame.dts;
- sample.duration = currentFrame.duration;
- sample.size = 4 * currentFrame.length; // Space for nal unit size
- sample.size += currentFrame.byteLength;
-
- if (currentFrame.keyFrame) {
- sample.flags.dependsOn = 2;
- }
-
- dataOffset += sample.size;
-
- samples.push(sample);
- }
- }
- return samples;
- };
-
- // generate the track's raw mdat data from an array of gops
- this.concatenateNalData_ = function (gops) {
- var
- h, i, j,
- currentGop,
- currentFrame,
- currentNal,
- dataOffset = 0,
- nalsByteLength = gops.byteLength,
- numberOfNals = gops.nalCount,
- totalByteLength = nalsByteLength + 4 * numberOfNals,
- data = new Uint8Array(totalByteLength),
- view = new DataView(data.buffer);
-
- // For each Gop..
- for (h = 0; h < gops.length; h++) {
- currentGop = gops[h];
-
- // For each Frame..
- for (i = 0; i < currentGop.length; i++) {
- currentFrame = currentGop[i];
-
- // For each NAL..
- for (j = 0; j < currentFrame.length; j++) {
- currentNal = currentFrame[j];
-
- view.setUint32(dataOffset, currentNal.data.byteLength);
- dataOffset += 4;
- data.set(currentNal.data, dataOffset);
- dataOffset += currentNal.data.byteLength;
- }
- }
- }
- return data;
- };
-};
-
-VideoSegmentStream.prototype = new Stream();
-
-/**
- * Store information about the start and end of the track and the
- * duration for each frame/sample we process in order to calculate
- * the baseMediaDecodeTime
- */
-collectDtsInfo = function (track, data) {
- if (typeof data.pts === 'number') {
- if (track.timelineStartInfo.pts === undefined) {
- track.timelineStartInfo.pts = data.pts;
- }
-
- if (track.minSegmentPts === undefined) {
- track.minSegmentPts = data.pts;
- } else {
- track.minSegmentPts = Math.min(track.minSegmentPts, data.pts);
- }
-
- if (track.maxSegmentPts === undefined) {
- track.maxSegmentPts = data.pts;
- } else {
- track.maxSegmentPts = Math.max(track.maxSegmentPts, data.pts);
- }
- }
-
- if (typeof data.dts === 'number') {
- if (track.timelineStartInfo.dts === undefined) {
- track.timelineStartInfo.dts = data.dts;
- }
-
- if (track.minSegmentDts === undefined) {
- track.minSegmentDts = data.dts;
- } else {
- track.minSegmentDts = Math.min(track.minSegmentDts, data.dts);
- }
-
- if (track.maxSegmentDts === undefined) {
- track.maxSegmentDts = data.dts;
- } else {
- track.maxSegmentDts = Math.max(track.maxSegmentDts, data.dts);
- }
- }
-};
-
-/**
- * Clear values used to calculate the baseMediaDecodeTime between
- * tracks
- */
-clearDtsInfo = function (track) {
- delete track.minSegmentDts;
- delete track.maxSegmentDts;
- delete track.minSegmentPts;
- delete track.maxSegmentPts;
-};
-
-/**
- * Calculate the track's baseMediaDecodeTime based on the earliest
- * DTS the transmuxer has ever seen and the minimum DTS for the
- * current track
- */
-calculateTrackBaseMediaDecodeTime = function (track) {
- var
- oneSecondInPTS = 90000, // 90kHz clock
- scale,
- // Calculate the distance, in time, that this segment starts from the start
- // of the timeline (earliest time seen since the transmuxer initialized)
- timeSinceStartOfTimeline = track.minSegmentDts - track.timelineStartInfo.dts,
- // Calculate the first sample's effective compositionTimeOffset
- firstSampleCompositionOffset = track.minSegmentPts - track.minSegmentDts;
-
- // track.timelineStartInfo.baseMediaDecodeTime is the location, in time, where
- // we want the start of the first segment to be placed
- track.baseMediaDecodeTime = track.timelineStartInfo.baseMediaDecodeTime;
-
- // Add to that the distance this segment is from the very first
- track.baseMediaDecodeTime += timeSinceStartOfTimeline;
-
- // Subtract this segment's "compositionTimeOffset" so that the first frame of
- // this segment is displayed exactly at the `baseMediaDecodeTime` or at the
- // end of the previous segment
- track.baseMediaDecodeTime -= firstSampleCompositionOffset;
-
- // baseMediaDecodeTime must not become negative
- track.baseMediaDecodeTime = Math.max(0, track.baseMediaDecodeTime);
-
- if (track.type === 'audio') {
- // Audio has a different clock equal to the sampling_rate so we need to
- // scale the PTS values into the clock rate of the track
- scale = track.samplerate / oneSecondInPTS;
- track.baseMediaDecodeTime *= scale;
- track.baseMediaDecodeTime = Math.floor(track.baseMediaDecodeTime);
- }
-};
-
-/**
- * A Stream that can combine multiple streams (ie. audio & video)
- * into a single output segment for MSE. Also supports audio-only
- * and video-only streams.
- */
-CoalesceStream = function(options) {
- // Number of Tracks per output segment
- // If greater than 1, we combine multiple
- // tracks into a single segment
- this.numberOfTracks = 0;
- this.metadataStream = options.metadataStream;
-
- if (typeof options.remux !== 'undefined') {
- this.remuxTracks = !!options.remux;
- } else {
- this.remuxTracks = true;
- }
-
- this.pendingTracks = [];
- this.videoTrack = null;
- this.pendingBoxes = [];
- this.pendingCaptions = [];
- this.pendingMetadata = [];
- this.pendingBytes = 0;
- this.emittedTracks = 0;
-
- CoalesceStream.prototype.init.call(this);
-
- // Take output from multiple
- this.push = function(output) {
- // buffer incoming captions until the associated video segment
- // finishes
- if (output.text) {
- return this.pendingCaptions.push(output);
- }
- // buffer incoming id3 tags until the final flush
- if (output.frames) {
- return this.pendingMetadata.push(output);
- }
-
- // Add this track to the list of pending tracks and store
- // important information required for the construction of
- // the final segment
- this.pendingTracks.push(output.track);
- this.pendingBoxes.push(output.boxes);
- this.pendingBytes += output.boxes.byteLength;
-
- if (output.track.type === 'video') {
- this.videoTrack = output.track;
- }
- if (output.track.type === 'audio') {
- this.audioTrack = output.track;
- }
- };
-};
-
-CoalesceStream.prototype = new Stream();
-CoalesceStream.prototype.flush = function() {
- var
- offset = 0,
- event = {
- captions: [],
- metadata: []
- },
- caption,
- id3,
- initSegment,
- timelineStartPts = 0,
- i;
-
- // Return until we have enough tracks from the pipeline to remux
- if (this.pendingTracks.length === 0 ||
- (this.remuxTracks && this.pendingTracks.length < this.numberOfTracks)) {
- return;
- }
-
- if (this.videoTrack) {
- timelineStartPts = this.videoTrack.timelineStartInfo.pts;
- } else if (this.audioTrack) {
- timelineStartPts = this.audioTrack.timelineStartInfo.pts;
- }
-
- if (this.pendingTracks.length === 1) {
- event.type = this.pendingTracks[0].type;
- } else {
- event.type = 'combined';
- }
- this.emittedTracks += this.pendingTracks.length;
-
- initSegment = mp4.initSegment(this.pendingTracks);
-
- // Create a new typed array large enough to hold the init
- // segment and all tracks
- event.data = new Uint8Array(initSegment.byteLength +
- this.pendingBytes);
-
- // Create an init segment containing a moov
- // and track definitions
- event.data.set(initSegment);
- offset += initSegment.byteLength;
-
- // Append each moof+mdat (one per track) after the init segment
- for (i = 0; i < this.pendingBoxes.length; i++) {
- event.data.set(this.pendingBoxes[i], offset);
- offset += this.pendingBoxes[i].byteLength;
- }
-
- // Translate caption PTS times into second offsets into the
- // video timeline for the segment
- for (i = 0; i < this.pendingCaptions.length; i++) {
- caption = this.pendingCaptions[i];
- caption.startTime = (caption.startPts - timelineStartPts);
- caption.startTime /= 90e3;
- caption.endTime = (caption.endPts - timelineStartPts);
- caption.endTime /= 90e3;
- event.captions.push(caption);
- }
-
- // Translate ID3 frame PTS times into second offsets into the
- // video timeline for the segment
- for (i = 0; i < this.pendingMetadata.length; i++) {
- id3 = this.pendingMetadata[i];
- id3.cueTime = (id3.pts - timelineStartPts);
- id3.cueTime /= 90e3;
- event.metadata.push(id3);
- }
- // We add this to every single emitted segment even though we only need
- // it for the first
- event.metadata.dispatchType = this.metadataStream.dispatchType;
-
- // Reset stream state
- this.pendingTracks.length = 0;
- this.videoTrack = null;
- this.pendingBoxes.length = 0;
- this.pendingCaptions.length = 0;
- this.pendingBytes = 0;
- this.pendingMetadata.length = 0;
-
- // Emit the built segment
- this.trigger('data', event);
-
- // Only emit `done` if all tracks have been flushed and emitted
- if (this.emittedTracks >= this.numberOfTracks) {
- this.trigger('done');
- this.emittedTracks = 0;
- }
-};
-/**
- * A Stream that expects MP2T binary data as input and produces
- * corresponding media segments, suitable for use with Media Source
- * Extension (MSE) implementations that support the ISO BMFF byte
- * stream format, like Chrome.
- */
-Transmuxer = function(options) {
- var
- self = this,
- videoTrack,
- audioTrack,
- packetStream, parseStream, elementaryStream,
- adtsStream, h264Stream,aacStream,
- videoSegmentStream, audioSegmentStream, captionStream,
- coalesceStream,
- headOfPipeline;
-
- this.setupAacPipeline = function() {
- this.metadataStream = new m2ts.MetadataStream();
- options.metadataStream = this.metadataStream;
-
- // set up the parsing pipeline
- aacStream = new AacStream();
- adtsStream = new AdtsStream();
- coalesceStream = new CoalesceStream(options);
- headOfPipeline = aacStream;
-
- aacStream.pipe(adtsStream);
- aacStream.pipe(this.metadataStream);
- this.metadataStream.pipe(coalesceStream);
-
- this.metadataStream.on('timestamp', function(frame) {
- aacStream.setTimestamp(frame.timestamp);
- });
- this.addAacListener();
- };
-
-
- this.addAacListener = function() {
- aacStream.on('data', function(data) {
- var i;
-
- if (data.type === 'timed-metadata') {
- var track = {
- timelineStartInfo: {
- baseMediaDecodeTime: 0 },
- codec: 'adts',
- type: 'audio' };
-
- if (track && !audioSegmentStream) {
- // hook up the audio segment stream to the first track with aac data
- coalesceStream.numberOfTracks++;
- audioSegmentStream = new AudioSegmentStream(track);
- // Set up the final part of the audio pipeline
- adtsStream
- .pipe(audioSegmentStream)
- .pipe(coalesceStream);
- }
- }
- });
- };
-
- this.setupTsPipeline = function() {
- this.metadataStream = new m2ts.MetadataStream();
-
- options.metadataStream = this.metadataStream;
-
- // set up the parsing pipeline
- packetStream = new m2ts.TransportPacketStream();
- parseStream = new m2ts.TransportParseStream();
- elementaryStream = new m2ts.ElementaryStream();
- adtsStream = new AdtsStream();
- h264Stream = new H264Stream();
- captionStream = new m2ts.CaptionStream();
- coalesceStream = new CoalesceStream(options);
- headOfPipeline = packetStream;
-
- // disassemble MPEG2-TS packets into elementary streams
- packetStream
- .pipe(parseStream)
- .pipe(elementaryStream);
-
- // !!THIS ORDER IS IMPORTANT!!
- // demux the streams
- elementaryStream
- .pipe(h264Stream);
- elementaryStream
- .pipe(adtsStream);
-
- elementaryStream
- .pipe(this.metadataStream)
- .pipe(coalesceStream);
-
- // Hook up CEA-608/708 caption stream
- h264Stream.pipe(captionStream)
- .pipe(coalesceStream);
- this.addTsListener();
- };
-
- this.addTsListener = function() {
-
- elementaryStream.on('data', function(data) {
- var i;
-
- if (data.type === 'metadata') {
- i = data.tracks.length;
-
- // scan the tracks listed in the metadata
- while (i--) {
- if (!videoTrack && data.tracks[i].type === 'video') {
- videoTrack = data.tracks[i];
- videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;
- } else if (!audioTrack && data.tracks[i].type === 'audio') {
- audioTrack = data.tracks[i];
- audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;
- }
- }
-
- // hook up the video segment stream to the first track with h264 data
- if (videoTrack && !videoSegmentStream) {
- coalesceStream.numberOfTracks++;
- videoSegmentStream = new VideoSegmentStream(videoTrack);
-
- videoSegmentStream.on('timelineStartInfo', function(timelineStartInfo){
- // When video emits timelineStartInfo data after a flush, we forward that
- // info to the AudioSegmentStream, if it exists, because video timeline
- // data takes precedence.
- if (audioTrack) {
- audioTrack.timelineStartInfo = timelineStartInfo;
- // On the first segment we trim AAC frames that exist before the
- // very earliest DTS we have seen in video because Chrome will
- // interpret any video track with a baseMediaDecodeTime that is
- // non-zero as a gap.
- audioSegmentStream.setEarliestDts(timelineStartInfo.dts);
- }
- });
-
- // Set up the final part of the video pipeline
- h264Stream
- .pipe(videoSegmentStream)
- .pipe(coalesceStream);
- }
-
- if (audioTrack && !audioSegmentStream) {
- // hook up the audio segment stream to the first track with aac data
- coalesceStream.numberOfTracks++;
- audioSegmentStream = new AudioSegmentStream(audioTrack);
-
- // Set up the final part of the audio pipeline
- adtsStream
- .pipe(audioSegmentStream)
- .pipe(coalesceStream);
- }
- }
- });
- };
- Transmuxer.prototype.init.call(this);
- options = options || {};
-
- this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;
-
- // expose the metadata stream
- if (options.aacfile === undefined) {
- this.setupTsPipeline();
- } else {
- this.setupAacPipeline();
- }
-
- // hook up the segment streams once track metadata is delivered
- this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) {
- this.baseMediaDecodeTime = baseMediaDecodeTime;
- if (audioTrack) {
- audioTrack.timelineStartInfo.dts = undefined;
- audioTrack.timelineStartInfo.pts = undefined;
- clearDtsInfo(audioTrack);
- audioTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;
- }
- if (videoTrack) {
- videoSegmentStream.gopCache_ = [];
- videoTrack.timelineStartInfo.dts = undefined;
- videoTrack.timelineStartInfo.pts = undefined;
- clearDtsInfo(videoTrack);
- videoTrack.timelineStartInfo.baseMediaDecodeTime = baseMediaDecodeTime;
- }
- };
-
- // feed incoming data to the front of the parsing pipeline
- this.push = function(data) {
- headOfPipeline.push(data);
- };
-
- // flush any buffered data
- this.flush = function() {
- // Start at the top of the pipeline and flush all pending work
- headOfPipeline.flush();
- };
-
- // Re-emit any data coming from the coalesce stream to the outside world
- coalesceStream.on('data', function (data) {
- self.trigger('data', data);
- });
- // Let the consumer know we have finished flushing the entire pipeline
- coalesceStream.on('done', function () {
- self.trigger('done');
- });
-};
-Transmuxer.prototype = new Stream();
-
-module.exports = {
- Transmuxer: Transmuxer,
- VideoSegmentStream: VideoSegmentStream,
- AudioSegmentStream: AudioSegmentStream,
-};
-
-},{"../aac":30,"../codecs/adts.js":31,"../codecs/h264":32,"../m2ts/m2ts.js":40,"../utils/stream.js":49,"./mp4-generator.js":44}],46:[function(require,module,exports){
-'use strict';
-
-var
- tagTypes = {
- 0x08: 'audio',
- 0x09: 'video',
- 0x12: 'metadata'
- },
- hex = function (val) {
- return '0x' + ('00' + val.toString(16)).slice(-2).toUpperCase();
- },
- hexStringList = function (data) {
- var arr = [], i;
- /* jshint -W086 */
- while(data.byteLength > 0) {
- i = 0;
- switch(data.byteLength) {
- default:
- arr.push(hex(data[i++]));
- case 7:
- arr.push(hex(data[i++]));
- case 6:
- arr.push(hex(data[i++]));
- case 5:
- arr.push(hex(data[i++]));
- case 4:
- arr.push(hex(data[i++]));
- case 3:
- arr.push(hex(data[i++]));
- case 2:
- arr.push(hex(data[i++]));
- case 1:
- arr.push(hex(data[i++]));
- }
- data = data.subarray(i);
- }
- /* jshint +W086 */
- return arr.join(' ');
- },
- parseAVCTag = function (tag, obj) {
- var
- avcPacketTypes = [
- 'AVC Sequence Header',
- 'AVC NALU',
- 'AVC End-of-Sequence'
- ],
- nalUnitTypes = [
- 'unspecified',
- 'slice_layer_without_partitioning',
- 'slice_data_partition_a_layer',
- 'slice_data_partition_b_layer',
- 'slice_data_partition_c_layer',
- 'slice_layer_without_partitioning_idr',
- 'sei',
- 'seq_parameter_set',
- 'pic_parameter_set',
- 'access_unit_delimiter',
- 'end_of_seq',
- 'end_of_stream',
- 'filler',
- 'seq_parameter_set_ext',
- 'prefix_nal_unit',
- 'subset_seq_parameter_set',
- 'reserved',
- 'reserved',
- 'reserved'
- ],
- compositionTime = (tag[1] & parseInt('01111111', 2) << 16) | (tag[2] << 8) | tag[3];
-
- obj = obj || {};
-
- obj.avcPacketType = avcPacketTypes[tag[0]];
- obj.CompositionTime = (tag[1] & parseInt('10000000', 2)) ? -compositionTime : compositionTime;
-
- if (tag[0] === 1) {
- obj.nalUnitTypeRaw = hexStringList(tag.subarray(4, 100));
- } else {
- obj.data = hexStringList(tag.subarray(4));
- }
-
- return obj;
- },
- parseVideoTag = function (tag, obj) {
- var
- frameTypes = [
- 'Unknown',
- 'Keyframe (for AVC, a seekable frame)',
- 'Inter frame (for AVC, a nonseekable frame)',
- 'Disposable inter frame (H.263 only)',
- 'Generated keyframe (reserved for server use only)',
- 'Video info/command frame'
- ],
- codecIDs = [
- 'JPEG (currently unused)',
- 'Sorenson H.263',
- 'Screen video',
- 'On2 VP6',
- 'On2 VP6 with alpha channel',
- 'Screen video version 2',
- 'AVC'
- ],
- codecID = tag[0] & parseInt('00001111', 2);
-
- obj = obj || {};
-
- obj.frameType = frameTypes[(tag[0] & parseInt('11110000', 2)) >>> 4];
- obj.codecID = codecID;
-
- if (codecID === 7) {
- return parseAVCTag(tag.subarray(1), obj);
- }
- return obj;
- },
- parseAACTag = function (tag, obj) {
- var packetTypes = [
- 'AAC Sequence Header',
- 'AAC Raw'
- ];
-
- obj = obj || {};
-
- obj.aacPacketType = packetTypes[tag[0]];
- obj.data = hexStringList(tag.subarray(1));
-
- return obj;
- },
- parseAudioTag = function (tag, obj) {
- var
- formatTable = [
- 'Linear PCM, platform endian',
- 'ADPCM',
- 'MP3',
- 'Linear PCM, little endian',
- 'Nellymoser 16-kHz mono',
- 'Nellymoser 8-kHz mono',
- 'Nellymoser',
- 'G.711 A-law logarithmic PCM',
- 'G.711 mu-law logarithmic PCM',
- 'reserved',
- 'AAC',
- 'Speex',
- 'MP3 8-Khz',
- 'Device-specific sound'
- ],
- samplingRateTable = [
- '5.5-kHz',
- '11-kHz',
- '22-kHz',
- '44-kHz'
- ],
- soundFormat = (tag[0] & parseInt('11110000', 2)) >>> 4;
-
- obj = obj || {};
-
- obj.soundFormat = formatTable[soundFormat];
- obj.soundRate = samplingRateTable[(tag[0] & parseInt('00001100', 2)) >>> 2];
- obj.soundSize = ((tag[0] & parseInt('00000010', 2)) >>> 1) ? '16-bit' : '8-bit';
- obj.soundType = (tag[0] & parseInt('00000001', 2)) ? 'Stereo' : 'Mono';
-
- if (soundFormat === 10) {
- return parseAACTag(tag.subarray(1), obj);
- }
- return obj;
- },
- parseGenericTag = function (tag) {
- return {
- tagType: tagTypes[tag[0]],
- dataSize: (tag[1] << 16) | (tag[2] << 8) | tag[3],
- timestamp: (tag[7] << 24) | (tag[4] << 16) | (tag[5] << 8) | tag[6],
- streamID: (tag[8] << 16) | (tag[9] << 8) | tag[10]
- };
- },
- inspectFlvTag = function (tag) {
- var header = parseGenericTag(tag);
- switch (tag[0]) {
- case 0x08:
- parseAudioTag(tag.subarray(11), header);
- break;
- case 0x09:
- parseVideoTag(tag.subarray(11), header);
- break;
- case 0x12:
- }
- return header;
- },
- inspectFlv = function (bytes) {
- var i = 9, // header
- dataSize,
- parsedResults = [],
- tag;
-
- // traverse the tags
- i += 4; // skip previous tag size
- while (i < bytes.byteLength) {
- dataSize = bytes[i + 1] << 16;
- dataSize |= bytes[i + 2] << 8;
- dataSize |= bytes[i + 3];
- dataSize += 11;
-
- tag = bytes.subarray(i, i + dataSize);
- parsedResults.push(inspectFlvTag(tag));
- i += dataSize + 4;
- }
- return parsedResults;
- },
- textifyFlv = function (flvTagArray) {
- return JSON.stringify(flvTagArray, null, 2);
- };
-
-module.exports = {
- inspectTag: inspectFlvTag,
- inspect: inspectFlv,
- textify: textifyFlv
-};
-
-},{}],47:[function(require,module,exports){
-(function (global){
-'use strict';
-
-var
- inspectMp4,
- textifyMp4,
- /**
- * Returns the string representation of an ASCII encoded four byte buffer.
- * @param buffer {Uint8Array} a four-byte buffer to translate
- * @return {string} the corresponding string
- */
- parseType = function(buffer) {
- var result = '';
- result += String.fromCharCode(buffer[0]);
- result += String.fromCharCode(buffer[1]);
- result += String.fromCharCode(buffer[2]);
- result += String.fromCharCode(buffer[3]);
- return result;
- },
- parseMp4Date = function(seconds) {
- return new Date(seconds * 1000 - 2082844800000);
- },
- parseSampleFlags = function(flags) {
- return {
- isLeading: (flags[0] & 0x0c) >>> 2,
- dependsOn: flags[0] & 0x03,
- isDependedOn: (flags[1] & 0xc0) >>> 6,
- hasRedundancy: (flags[1] & 0x30) >>> 4,
- paddingValue: (flags[1] & 0x0e) >>> 1,
- isNonSyncSample: flags[1] & 0x01,
- degradationPriority: (flags[2] << 8) | flags[3]
- };
- },
- nalParse = function(avcStream) {
- var
- avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),
- result = [],
- i,
- length;
- for (i = 0; i + 4 < avcStream.length; i += length) {
- length = avcView.getUint32(i);
- i += 4;
-
- // bail if this doesn't appear to be an H264 stream
- if (length <= 0) {
- return;
- }
-
- switch(avcStream[i] & 0x1F) {
- case 0x01:
- result.push('slice_layer_without_partitioning_rbsp');
- break;
- case 0x05:
- result.push('slice_layer_without_partitioning_rbsp_idr');
- break;
- case 0x06:
- result.push('sei_rbsp');
- break;
- case 0x07:
- result.push('seq_parameter_set_rbsp');
- break;
- case 0x08:
- result.push('pic_parameter_set_rbsp');
- break;
- case 0x09:
- result.push('access_unit_delimiter_rbsp');
- break;
- default:
- result.push(avcStream[i] & 0x1F);
- break;
- }
- }
- return result;
- },
-
- // registry of handlers for individual mp4 box types
- parse = {
- // codingname, not a first-class box type. stsd entries share the
- // same format as real boxes so the parsing infrastructure can be
- // shared
- avc1: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
- return {
- dataReferenceIndex: view.getUint16(6),
- width: view.getUint16(24),
- height: view.getUint16(26),
- horizresolution: view.getUint16(28) + (view.getUint16(30) / 16),
- vertresolution: view.getUint16(32) + (view.getUint16(34) / 16),
- frameCount: view.getUint16(40),
- depth: view.getUint16(74),
- config: inspectMp4(data.subarray(78, data.byteLength))
- };
- },
- avcC: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- configurationVersion: data[0],
- avcProfileIndication: data[1],
- profileCompatibility: data[2],
- avcLevelIndication: data[3],
- lengthSizeMinusOne: data[4] & 0x03,
- sps: [],
- pps: []
- },
- numOfSequenceParameterSets = data[5] & 0x1f,
- numOfPictureParameterSets,
- nalSize,
- offset,
- i;
-
- // iterate past any SPSs
- offset = 6;
- for (i = 0; i < numOfSequenceParameterSets; i++) {
- nalSize = view.getUint16(offset);
- offset += 2;
- result.sps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));
- offset += nalSize;
- }
- // iterate past any PPSs
- numOfPictureParameterSets = data[offset];
- offset++;
- for (i = 0; i < numOfPictureParameterSets; i++) {
- nalSize = view.getUint16(offset);
- offset += 2;
- result.pps.push(new Uint8Array(data.subarray(offset, offset + nalSize)));
- offset += nalSize;
- }
- return result;
- },
- btrt: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
- return {
- bufferSizeDB: view.getUint32(0),
- maxBitrate: view.getUint32(4),
- avgBitrate: view.getUint32(8)
- };
- },
- esds: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- esId: (data[6] << 8) | data[7],
- streamPriority: data[8] & 0x1f,
- decoderConfig: {
- objectProfileIndication: data[11],
- streamType: (data[12] >>> 2) & 0x3f,
- bufferSize: (data[13] << 16) | (data[14] << 8) | data[15],
- maxBitrate: (data[16] << 24) |
- (data[17] << 16) |
- (data[18] << 8) |
- data[19],
- avgBitrate: (data[20] << 24) |
- (data[21] << 16) |
- (data[22] << 8) |
- data[23],
- decoderConfigDescriptor: {
- tag: data[24],
- length: data[25],
- audioObjectType: (data[26] >>> 3) & 0x1f,
- samplingFrequencyIndex: ((data[26] & 0x07) << 1) |
- ((data[27] >>> 7) & 0x01),
- channelConfiguration: (data[27] >>> 3) & 0x0f
- }
- }
- };
- },
- ftyp: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- majorBrand: parseType(data.subarray(0, 4)),
- minorVersion: view.getUint32(4),
- compatibleBrands: []
- },
- i = 8;
- while (i < data.byteLength) {
- result.compatibleBrands.push(parseType(data.subarray(i, i + 4)));
- i += 4;
- }
- return result;
- },
- dinf: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- dref: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- dataReferences: inspectMp4(data.subarray(8))
- };
- },
- hdlr: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- language,
- result = {
- version: view.getUint8(0),
- flags: new Uint8Array(data.subarray(1, 4)),
- handlerType: parseType(data.subarray(8, 12)),
- name: ''
- },
- i = 8;
-
- // parse out the name field
- for (i = 24; i < data.byteLength; i++) {
- if (data[i] === 0x00) {
- // the name field is null-terminated
- i++;
- break;
- }
- result.name += String.fromCharCode(data[i]);
- }
- // decode UTF-8 to javascript's internal representation
- // see http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html
- result.name = decodeURIComponent(global.escape(result.name));
-
- return result;
- },
- mdat: function(data) {
- return {
- byteLength: data.byteLength,
- nals: nalParse(data)
- };
- },
- mdhd: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- i = 4,
- language,
- result = {
- version: view.getUint8(0),
- flags: new Uint8Array(data.subarray(1, 4)),
- language: ''
- };
- if (result.version === 1) {
- i += 4;
- result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 8;
- result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 4;
- result.timescale = view.getUint32(i);
- i += 8;
- result.duration = view.getUint32(i); // truncating top 4 bytes
- } else {
- result.creationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.modificationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.timescale = view.getUint32(i);
- i += 4;
- result.duration = view.getUint32(i);
- }
- i += 4;
- // language is stored as an ISO-639-2/T code in an array of three 5-bit fields
- // each field is the packed difference between its ASCII value and 0x60
- language = view.getUint16(i);
- result.language += String.fromCharCode((language >> 10) + 0x60);
- result.language += String.fromCharCode(((language & 0x03c0) >> 5) + 0x60);
- result.language += String.fromCharCode((language & 0x1f) + 0x60);
-
- return result;
- },
- mdia: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- mfhd: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- sequenceNumber: (data[4] << 24) |
- (data[5] << 16) |
- (data[6] << 8) |
- (data[7])
- };
- },
- minf: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- // codingname, not a first-class box type. stsd entries share the
- // same format as real boxes so the parsing infrastructure can be
- // shared
- mp4a: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- // 6 bytes reserved
- dataReferenceIndex: view.getUint16(6),
- // 4 + 4 bytes reserved
- channelcount: view.getUint16(16),
- samplesize: view.getUint16(18),
- // 2 bytes pre_defined
- // 2 bytes reserved
- samplerate: view.getUint16(24) + (view.getUint16(26) / 65536)
- };
-
- // if there are more bytes to process, assume this is an ISO/IEC
- // 14496-14 MP4AudioSampleEntry and parse the ESDBox
- if (data.byteLength > 28) {
- result.streamDescriptor = inspectMp4(data.subarray(28))[0];
- }
- return result;
- },
- moof: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- moov: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- mvex: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- mvhd: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- i = 4,
- result = {
- version: view.getUint8(0),
- flags: new Uint8Array(data.subarray(1, 4))
- };
-
- if (result.version === 1) {
- i += 4;
- result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 8;
- result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 4;
- result.timescale = view.getUint32(i);
- i += 8;
- result.duration = view.getUint32(i); // truncating top 4 bytes
- } else {
- result.creationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.modificationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.timescale = view.getUint32(i);
- i += 4;
- result.duration = view.getUint32(i);
- }
- i += 4;
-
- // convert fixed-point, base 16 back to a number
- result.rate = view.getUint16(i) + (view.getUint16(i + 2) / 16);
- i += 4;
- result.volume = view.getUint8(i) + (view.getUint8(i + 1) / 8);
- i += 2;
- i += 2;
- i += 2 * 4;
- result.matrix = new Uint32Array(data.subarray(i, i + (9 * 4)));
- i += 9 * 4;
- i += 6 * 4;
- result.nextTrackId = view.getUint32(i);
- return result;
- },
- pdin: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
- return {
- version: view.getUint8(0),
- flags: new Uint8Array(data.subarray(1, 4)),
- rate: view.getUint32(4),
- initialDelay: view.getUint32(8)
- };
- },
- sdtp: function(data) {
- var
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- samples: []
- }, i;
-
- for (i = 4; i < data.byteLength; i++) {
- result.samples.push({
- dependsOn: (data[i] & 0x30) >> 4,
- isDependedOn: (data[i] & 0x0c) >> 2,
- hasRedundancy: data[i] & 0x03
- });
- }
- return result;
- },
- sidx: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- references: [],
- referenceId: view.getUint32(4),
- timescale: view.getUint32(8),
- earliestPresentationTime: view.getUint32(12),
- firstOffset: view.getUint32(16)
- },
- referenceCount = view.getUint16(22),
- i;
-
- for (i = 24; referenceCount; i += 12, referenceCount-- ) {
- result.references.push({
- referenceType: (data[i] & 0x80) >>> 7,
- referencedSize: view.getUint32(i) & 0x7FFFFFFF,
- subsegmentDuration: view.getUint32(i + 4),
- startsWithSap: !!(data[i + 8] & 0x80),
- sapType: (data[i + 8] & 0x70) >>> 4,
- sapDeltaTime: view.getUint32(i + 8) & 0x0FFFFFFF
- });
- }
-
- return result;
- },
- smhd: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- balance: data[4] + (data[5] / 256)
- };
- },
- stbl: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- stco: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- chunkOffsets: []
- },
- entryCount = view.getUint32(4),
- i;
- for (i = 8; entryCount; i += 4, entryCount--) {
- result.chunkOffsets.push(view.getUint32(i));
- }
- return result;
- },
- stsc: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- entryCount = view.getUint32(4),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- sampleToChunks: []
- },
- i;
- for (i = 8; entryCount; i += 12, entryCount--) {
- result.sampleToChunks.push({
- firstChunk: view.getUint32(i),
- samplesPerChunk: view.getUint32(i + 4),
- sampleDescriptionIndex: view.getUint32(i + 8)
- });
- }
- return result;
- },
- stsd: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- sampleDescriptions: inspectMp4(data.subarray(8))
- };
- },
- stsz: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- sampleSize: view.getUint32(4),
- entries: []
- },
- i;
- for (i = 12; i < data.byteLength; i += 4) {
- result.entries.push(view.getUint32(i));
- }
- return result;
- },
- stts: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- timeToSamples: []
- },
- entryCount = view.getUint32(4),
- i;
-
- for (i = 8; entryCount; i += 8, entryCount--) {
- result.timeToSamples.push({
- sampleCount: view.getUint32(i),
- sampleDelta: view.getUint32(i + 4)
- });
- }
- return result;
- },
- styp: function(data) {
- return parse.ftyp(data);
- },
- tfdt: function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- baseMediaDecodeTime: data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]
- };
- },
- tfhd: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- trackId: view.getUint32(4)
- },
- baseDataOffsetPresent = result.flags[2] & 0x01,
- sampleDescriptionIndexPresent = result.flags[2] & 0x02,
- defaultSampleDurationPresent = result.flags[2] & 0x08,
- defaultSampleSizePresent = result.flags[2] & 0x10,
- defaultSampleFlagsPresent = result.flags[2] & 0x20,
- i;
-
- i = 8;
- if (baseDataOffsetPresent) {
- i += 4; // truncate top 4 bytes
- result.baseDataOffset = view.getUint32(12);
- i += 4;
- }
- if (sampleDescriptionIndexPresent) {
- result.sampleDescriptionIndex = view.getUint32(i);
- i += 4;
- }
- if (defaultSampleDurationPresent) {
- result.defaultSampleDuration = view.getUint32(i);
- i += 4;
- }
- if (defaultSampleSizePresent) {
- result.defaultSampleSize = view.getUint32(i);
- i += 4;
- }
- if (defaultSampleFlagsPresent) {
- result.defaultSampleFlags = view.getUint32(i);
- }
- return result;
- },
- tkhd: function(data) {
- var
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- i = 4,
- result = {
- version: view.getUint8(0),
- flags: new Uint8Array(data.subarray(1, 4)),
- };
- if (result.version === 1) {
- i += 4;
- result.creationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 8;
- result.modificationTime = parseMp4Date(view.getUint32(i)); // truncating top 4 bytes
- i += 4;
- result.trackId = view.getUint32(i);
- i += 4;
- i += 8;
- result.duration = view.getUint32(i); // truncating top 4 bytes
- } else {
- result.creationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.modificationTime = parseMp4Date(view.getUint32(i));
- i += 4;
- result.trackId = view.getUint32(i);
- i += 4;
- i += 4;
- result.duration = view.getUint32(i);
- }
- i += 4;
- i += 2 * 4;
- result.layer = view.getUint16(i);
- i += 2;
- result.alternateGroup = view.getUint16(i);
- i += 2;
- // convert fixed-point, base 16 back to a number
- result.volume = view.getUint8(i) + (view.getUint8(i + 1) / 8);
- i += 2;
- i += 2;
- result.matrix = new Uint32Array(data.subarray(i, i + (9 * 4)));
- i += 9 * 4;
- result.width = view.getUint16(i) + (view.getUint16(i + 2) / 16);
- i += 4;
- result.height = view.getUint16(i) + (view.getUint16(i + 2) / 16);
- return result;
- },
- traf: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- trak: function(data) {
- return {
- boxes: inspectMp4(data)
- };
- },
- trex: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- trackId: view.getUint32(4),
- defaultSampleDescriptionIndex: view.getUint32(8),
- defaultSampleDuration: view.getUint32(12),
- defaultSampleSize: view.getUint32(16),
- sampleDependsOn: data[20] & 0x03,
- sampleIsDependedOn: (data[21] & 0xc0) >> 6,
- sampleHasRedundancy: (data[21] & 0x30) >> 4,
- samplePaddingValue: (data[21] & 0x0e) >> 1,
- sampleIsDifferenceSample: !!(data[21] & 0x01),
- sampleDegradationPriority: view.getUint16(22)
- };
- },
- trun: function(data) {
- var
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- samples: []
- },
- view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- dataOffsetPresent = result.flags[2] & 0x01,
- firstSampleFlagsPresent = result.flags[2] & 0x04,
- sampleDurationPresent = result.flags[1] & 0x01,
- sampleSizePresent = result.flags[1] & 0x02,
- sampleFlagsPresent = result.flags[1] & 0x04,
- sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,
- sampleCount = view.getUint32(4),
- offset = 8,
- sample;
-
- if (dataOffsetPresent) {
- result.dataOffset = view.getUint32(offset);
- offset += 4;
- }
-
- if (firstSampleFlagsPresent && sampleCount) {
- sample = {
- flags: parseSampleFlags(data.subarray(offset, offset + 4))
- };
- offset += 4;
- if (sampleDurationPresent) {
- sample.duration = view.getUint32(offset);
- offset += 4;
- }
- if (sampleSizePresent) {
- sample.size = view.getUint32(offset);
- offset += 4;
- }
- if (sampleCompositionTimeOffsetPresent) {
- sample.compositionTimeOffset = view.getUint32(offset);
- offset += 4;
- }
- result.samples.push(sample);
- sampleCount--;
- }
-
- while (sampleCount--) {
- sample = {};
- if (sampleDurationPresent) {
- sample.duration = view.getUint32(offset);
- offset += 4;
- }
- if (sampleSizePresent) {
- sample.size = view.getUint32(offset);
- offset += 4;
- }
- if (sampleFlagsPresent) {
- sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));
- offset += 4;
- }
- if (sampleCompositionTimeOffsetPresent) {
- sample.compositionTimeOffset = view.getUint32(offset);
- offset += 4;
- }
- result.samples.push(sample);
- }
- return result;
- },
- 'url ': function(data) {
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4))
- };
- },
- vmhd: function(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
- return {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- graphicsmode: view.getUint16(4),
- opcolor: new Uint16Array([view.getUint16(6),
- view.getUint16(8),
- view.getUint16(10)])
- };
- }
- };
-
-
-/**
- * Return a javascript array of box objects parsed from an ISO base
- * media file.
- * @param data {Uint8Array} the binary data of the media to be inspected
- * @return {array} a javascript array of potentially nested box objects
- */
-inspectMp4 = function(data) {
- var
- i = 0,
- result = [],
- view,
- size,
- type,
- end,
- box;
-
- // Convert data from Uint8Array to ArrayBuffer, to follow Dataview API
- var ab = new ArrayBuffer(data.length);
- var v = new Uint8Array(ab);
- for (var z = 0; z < data.length; ++z) {
- v[z] = data[z];
- }
- view = new DataView(ab);
-
-
- while (i < data.byteLength) {
- // parse box data
- size = view.getUint32(i);
- type = parseType(data.subarray(i + 4, i + 8));
- end = size > 1 ? i + size : data.byteLength;
-
- // parse type-specific data
- box = (parse[type] || function(data) {
- return {
- data: data
- };
- })(data.subarray(i + 8, end));
- box.size = size;
- box.type = type;
-
- // store this box and move to the next
- result.push(box);
- i = end;
- }
- return result;
-};
-
-/**
- * Returns a textual representation of the javascript represtentation
- * of an MP4 file. You can use it as an alternative to
- * JSON.stringify() to compare inspected MP4s.
- * @param inspectedMp4 {array} the parsed array of boxes in an MP4
- * file
- * @param depth {number} (optional) the number of ancestor boxes of
- * the elements of inspectedMp4. Assumed to be zero if unspecified.
- * @return {string} a text representation of the parsed MP4
- */
-textifyMp4 = function(inspectedMp4, depth) {
- var indent;
- depth = depth || 0;
- indent = new Array(depth * 2 + 1).join(' ');
-
- // iterate over all the boxes
- return inspectedMp4.map(function(box, index) {
-
- // list the box type first at the current indentation level
- return indent + box.type + '\n' +
-
- // the type is already included and handle child boxes separately
- Object.keys(box).filter(function(key) {
- return key !== 'type' && key !== 'boxes';
-
- // output all the box properties
- }).map(function(key) {
- var prefix = indent + ' ' + key + ': ',
- value = box[key];
-
- // print out raw bytes as hexademical
- if (value instanceof Uint8Array || value instanceof Uint32Array) {
- var bytes = Array.prototype.slice.call(new Uint8Array(value.buffer, value.byteOffset, value.byteLength))
- .map(function(byte) {
- return ' ' + ('00' + byte.toString(16)).slice(-2);
- }).join('').match(/.{1,24}/g);
- if (!bytes) {
- return prefix + '<>';
- }
- if (bytes.length === 1) {
- return prefix + '<' + bytes.join('').slice(1) + '>';
- }
- return prefix + '<\n' + bytes.map(function(line) {
- return indent + ' ' + line;
- }).join('\n') + '\n' + indent + ' >';
- }
-
- // stringify generic objects
- return prefix +
- JSON.stringify(value, null, 2)
- .split('\n').map(function(line, index) {
- if (index === 0) {
- return line;
- }
- return indent + ' ' + line;
- }).join('\n');
- }).join('\n') +
-
- // recursively textify the child boxes
- (box.boxes ? '\n' + textifyMp4(box.boxes, depth + 1) : '');
- }).join('\n');
-};
-
-module.exports = {
- inspect: inspectMp4,
- textify: textifyMp4
-};
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],48:[function(require,module,exports){
-'use strict';
-
-var ExpGolomb;
-
-/**
- * Parser for exponential Golomb codes, a variable-bitwidth number encoding
- * scheme used by h264.
- */
-ExpGolomb = function(workingData) {
- var
- // the number of bytes left to examine in workingData
- workingBytesAvailable = workingData.byteLength,
-
- // the current word being examined
- workingWord = 0, // :uint
-
- // the number of bits left to examine in the current word
- workingBitsAvailable = 0; // :uint;
-
- // ():uint
- this.length = function() {
- return (8 * workingBytesAvailable);
- };
-
- // ():uint
- this.bitsAvailable = function() {
- return (8 * workingBytesAvailable) + workingBitsAvailable;
- };
-
- // ():void
- this.loadWord = function() {
- var
- position = workingData.byteLength - workingBytesAvailable,
- workingBytes = new Uint8Array(4),
- availableBytes = Math.min(4, workingBytesAvailable);
-
- if (availableBytes === 0) {
- throw new Error('no bytes available');
- }
-
- workingBytes.set(workingData.subarray(position,
- position + availableBytes));
- workingWord = new DataView(workingBytes.buffer).getUint32(0);
-
- // track the amount of workingData that has been processed
- workingBitsAvailable = availableBytes * 8;
- workingBytesAvailable -= availableBytes;
- };
-
- // (count:int):void
- this.skipBits = function(count) {
- var skipBytes; // :int
- if (workingBitsAvailable > count) {
- workingWord <<= count;
- workingBitsAvailable -= count;
- } else {
- count -= workingBitsAvailable;
- skipBytes = Math.floor(count / 8);
-
- count -= (skipBytes * 8);
- workingBytesAvailable -= skipBytes;
-
- this.loadWord();
-
- workingWord <<= count;
- workingBitsAvailable -= count;
- }
- };
-
- // (size:int):uint
- this.readBits = function(size) {
- var
- bits = Math.min(workingBitsAvailable, size), // :uint
- valu = workingWord >>> (32 - bits); // :uint
- // if size > 31, handle error
- workingBitsAvailable -= bits;
- if (workingBitsAvailable > 0) {
- workingWord <<= bits;
- } else if (workingBytesAvailable > 0) {
- this.loadWord();
- }
-
- bits = size - bits;
- if (bits > 0) {
- return valu << bits | this.readBits(bits);
- } else {
- return valu;
- }
- };
-
- // ():uint
- this.skipLeadingZeros = function() {
- var leadingZeroCount; // :uint
- for (leadingZeroCount = 0 ; leadingZeroCount < workingBitsAvailable ; ++leadingZeroCount) {
- if (0 !== (workingWord & (0x80000000 >>> leadingZeroCount))) {
- // the first bit of working word is 1
- workingWord <<= leadingZeroCount;
- workingBitsAvailable -= leadingZeroCount;
- return leadingZeroCount;
- }
- }
-
- // we exhausted workingWord and still have not found a 1
- this.loadWord();
- return leadingZeroCount + this.skipLeadingZeros();
- };
-
- // ():void
- this.skipUnsignedExpGolomb = function() {
- this.skipBits(1 + this.skipLeadingZeros());
- };
-
- // ():void
- this.skipExpGolomb = function() {
- this.skipBits(1 + this.skipLeadingZeros());
- };
-
- // ():uint
- this.readUnsignedExpGolomb = function() {
- var clz = this.skipLeadingZeros(); // :uint
- return this.readBits(clz + 1) - 1;
- };
-
- // ():int
- this.readExpGolomb = function() {
- var valu = this.readUnsignedExpGolomb(); // :int
- if (0x01 & valu) {
- // the number is odd if the low order bit is set
- return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2
- } else {
- return -1 * (valu >>> 1); // divide by two then make it negative
- }
- };
-
- // Some convenience functions
- // :Boolean
- this.readBoolean = function() {
- return 1 === this.readBits(1);
- };
-
- // ():int
- this.readUnsignedByte = function() {
- return this.readBits(8);
- };
-
- this.loadWord();
-};
-
-module.exports = ExpGolomb;
-
-},{}],49:[function(require,module,exports){
-/**
- * mux.js
- *
- * Copyright (c) 2014 Brightcove
- * All rights reserved.
- *
- * A lightweight readable stream implemention that handles event dispatching.
- * Objects that inherit from streams should call init in their constructors.
- */
-'use strict';
-
-var Stream = function() {
- this.init = function() {
- var listeners = {};
- /**
- * Add a listener for a specified event type.
- * @param type {string} the event name
- * @param listener {function} the callback to be invoked when an event of
- * the specified type occurs
- */
- this.on = function(type, listener) {
- if (!listeners[type]) {
- listeners[type] = [];
- }
- listeners[type].push(listener);
- };
- /**
- * Remove a listener for a specified event type.
- * @param type {string} the event name
- * @param listener {function} a function previously registered for this
- * type of event through `on`
- */
- this.off = function(type, listener) {
- var index;
- if (!listeners[type]) {
- return false;
- }
- index = listeners[type].indexOf(listener);
- listeners[type].splice(index, 1);
- return index > -1;
- };
- /**
- * Trigger an event of the specified type on this stream. Any additional
- * arguments to this function are passed as parameters to event listeners.
- * @param type {string} the event name
- */
- this.trigger = function(type) {
- var callbacks, i, length, args;
- callbacks = listeners[type];
- if (!callbacks) {
- return;
- }
- // Slicing the arguments on every invocation of this method
- // can add a significant amount of overhead. Avoid the
- // intermediate object creation for the common case of a
- // single callback argument
- if (arguments.length === 2) {
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].call(this, arguments[1]);
- }
- } else {
- args = [];
- i = arguments.length;
- for (i = 1; i < arguments.length; ++i) {
- args.push(arguments[i]);
- }
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].apply(this, args);
- }
- }
- };
- /**
- * Destroys the stream and cleans up.
- */
- this.dispose = function() {
- listeners = {};
- };
- };
-};
-
-/**
- * Forwards all `data` events on this stream to the destination stream. The
- * destination stream should provide a method `push` to receive the data
- * events as they arrive.
- * @param destination {stream} the stream that will receive all `data` events
- * @param autoFlush {boolean} if false, we will not call `flush` on the destination
- * when the current stream emits a 'done' event
- * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
- */
-Stream.prototype.pipe = function(destination) {
- this.on('data', function(data) {
- destination.push(data);
- });
-
- this.on('done', function() {
- destination.flush();
- });
-
- return destination;
-};
-
-// Default stream functions that are expected to be overridden to perform
-// actual work. These are provided by the prototype as a sort of no-op
-// implementation so that we don't have to check for their existence in the
-// `pipe` function above.
-Stream.prototype.push = function(data) {
- this.trigger('data', data);
-};
-
-Stream.prototype.flush = function() {
- this.trigger('done');
-};
-
-module.exports = Stream;
-
-},{}],50:[function(require,module,exports){
-var bundleFn = arguments[3];
-var sources = arguments[4];
-var cache = arguments[5];
-
-var stringify = JSON.stringify;
-
-module.exports = function (fn) {
- var keys = [];
- var wkey;
- var cacheKeys = Object.keys(cache);
-
- for (var i = 0, l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- if (cache[key].exports === fn) {
- wkey = key;
- break;
- }
- }
-
- if (!wkey) {
- wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
- var wcache = {};
- for (var i = 0, l = cacheKeys.length; i < l; i++) {
- var key = cacheKeys[i];
- wcache[key] = key;
- }
- sources[wkey] = [
- Function(['require','module','exports'], '(' + fn + ')(self)'),
- wcache
- ];
- }
- var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);
-
- var scache = {}; scache[wkey] = wkey;
- sources[skey] = [
- Function(['require'],'require(' + stringify(wkey) + ')(self)'),
- scache
- ];
-
- var src = '(' + bundleFn + ')({'
- + Object.keys(sources).map(function (key) {
- return stringify(key) + ':['
- + sources[key][0]
- + ',' + stringify(sources[key][1]) + ']'
- ;
- }).join(',')
- + '},{},[' + stringify(skey) + '])'
- ;
-
- var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
-
- return new Worker(URL.createObjectURL(
- new Blob([src], { type: 'text/javascript' })
- ));
-};
-
-},{}],51:[function(require,module,exports){
-(function (global){
-/**
- * videojs-hls
- * The main file for the HLS project.
- * License: https://github.com/videojs/videojs-contrib-hls/blob/master/LICENSE
- */
-'use strict';
-
-Object.defineProperty(exports, '__esModule', {
- value: true
-});
-
-var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
-
-var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _playlistLoader = require('./playlist-loader');
-
-var _playlistLoader2 = _interopRequireDefault(_playlistLoader);
-
-var _playlist = require('./playlist');
-
-var _playlist2 = _interopRequireDefault(_playlist);
-
-var _xhr = require('./xhr');
-
-var _xhr2 = _interopRequireDefault(_xhr);
-
-var _decrypter = require('./decrypter');
-
-var _binUtils = require('./bin-utils');
-
-var _binUtils2 = _interopRequireDefault(_binUtils);
-
-var _videojsContribMediaSources = require('videojs-contrib-media-sources');
-
-var _m3u8 = require('./m3u8');
-
-var _m3u82 = _interopRequireDefault(_m3u8);
-
-var _videoJs = (typeof window !== "undefined" ? window['videojs'] : typeof global !== "undefined" ? global['videojs'] : null);
-
-var _videoJs2 = _interopRequireDefault(_videoJs);
-
-var _resolveUrl = require('./resolve-url');
-
-var _resolveUrl2 = _interopRequireDefault(_resolveUrl);
-
-var Hls = {
- PlaylistLoader: _playlistLoader2['default'],
- Playlist: _playlist2['default'],
- Decrypter: _decrypter.Decrypter,
- AsyncStream: _decrypter.AsyncStream,
- decrypt: _decrypter.decrypt,
- utils: _binUtils2['default'],
- xhr: _xhr2['default']
-};
-
-// the desired length of video to maintain in the buffer, in seconds
-Hls.GOAL_BUFFER_LENGTH = 30;
-
-// HLS is a source handler, not a tech. Make sure attempts to use it
-// as one do not cause exceptions.
-Hls.canPlaySource = function () {
- return _videoJs2['default'].log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\'s techOrder.');
-};
-
-// Search for a likely end time for the segment that was just appened
-// based on the state of the `buffered` property before and after the
-// append.
-// If we found only one such uncommon end-point return it.
-Hls.findSoleUncommonTimeRangesEnd_ = function (original, update) {
- var i = undefined;
- var start = undefined;
- var end = undefined;
- var result = [];
- var edges = [];
-
- // In order to qualify as a possible candidate, the end point must:
- // 1) Not have already existed in the `original` ranges
- // 2) Not result from the shrinking of a range that already existed
- // in the `original` ranges
- // 3) Not be contained inside of a range that existed in `original`
- var overlapsCurrentEnd = function overlapsCurrentEnd(span) {
- return span[0] <= end && span[1] >= end;
- };
-
- if (original) {
- // Save all the edges in the `original` TimeRanges object
- for (i = 0; i < original.length; i++) {
- start = original.start(i);
- end = original.end(i);
-
- edges.push([start, end]);
- }
- }
-
- if (update) {
- // Save any end-points in `update` that are not in the `original`
- // TimeRanges object
- for (i = 0; i < update.length; i++) {
- start = update.start(i);
- end = update.end(i);
-
- if (edges.some(overlapsCurrentEnd)) {
- continue;
- }
-
- // at this point it must be a unique non-shrinking end edge
- result.push(end);
- }
- }
-
- // we err on the side of caution and return null if didn't find
- // exactly *one* differing end edge in the search above
- if (result.length !== 1) {
- return null;
- }
-
- return result[0];
-};
-
-/**
- * Whether the browser has built-in HLS support.
- */
-Hls.supportsNativeHls = (function () {
- var video = document.createElement('video');
- var xMpegUrl = undefined;
- var vndMpeg = undefined;
-
- // native HLS is definitely not supported if HTML5 video isn't
- if (!_videoJs2['default'].getComponent('Html5').isSupported()) {
- return false;
- }
-
- xMpegUrl = video.canPlayType('application/x-mpegURL');
- vndMpeg = video.canPlayType('application/vnd.apple.mpegURL');
- return (/probably|maybe/.test(xMpegUrl) || /probably|maybe/.test(vndMpeg)
- );
-})();
-
-// HLS is a source handler, not a tech. Make sure attempts to use it
-// as one do not cause exceptions.
-Hls.isSupported = function () {
- return _videoJs2['default'].log.warn('HLS is no longer a tech. Please remove it from ' + 'your player\'s techOrder.');
-};
-
-/**
- * A comparator function to sort two playlist object by bandwidth.
- * @param left {object} a media playlist object
- * @param right {object} a media playlist object
- * @return {number} Greater than zero if the bandwidth attribute of
- * left is greater than the corresponding attribute of right. Less
- * than zero if the bandwidth of right is greater than left and
- * exactly zero if the two are equal.
- */
-Hls.comparePlaylistBandwidth = function (left, right) {
- var leftBandwidth = undefined;
- var rightBandwidth = undefined;
-
- if (left.attributes && left.attributes.BANDWIDTH) {
- leftBandwidth = left.attributes.BANDWIDTH;
- }
- leftBandwidth = leftBandwidth || window.Number.MAX_VALUE;
- if (right.attributes && right.attributes.BANDWIDTH) {
- rightBandwidth = right.attributes.BANDWIDTH;
- }
- rightBandwidth = rightBandwidth || window.Number.MAX_VALUE;
-
- return leftBandwidth - rightBandwidth;
-};
-
-/**
- * A comparator function to sort two playlist object by resolution (width).
- * @param left {object} a media playlist object
- * @param right {object} a media playlist object
- * @return {number} Greater than zero if the resolution.width attribute of
- * left is greater than the corresponding attribute of right. Less
- * than zero if the resolution.width of right is greater than left and
- * exactly zero if the two are equal.
- */
-Hls.comparePlaylistResolution = function (left, right) {
- var leftWidth = undefined;
- var rightWidth = undefined;
-
- if (left.attributes && left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) {
- leftWidth = left.attributes.RESOLUTION.width;
- }
-
- leftWidth = leftWidth || window.Number.MAX_VALUE;
-
- if (right.attributes && right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) {
- rightWidth = right.attributes.RESOLUTION.width;
- }
-
- rightWidth = rightWidth || window.Number.MAX_VALUE;
-
- // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions
- // have the same media dimensions/ resolution
- if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) {
- return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH;
- }
- return leftWidth - rightWidth;
-};
-
-// A fudge factor to apply to advertised playlist bitrates to account for
-// temporary flucations in client bandwidth
-var bandwidthVariance = 1.2;
-
-// 5 minute blacklist
-var blacklistDuration = 5 * 60 * 1000;
-
-// Fudge factor to account for TimeRanges rounding
-var TIME_FUDGE_FACTOR = 1 / 30;
-var Component = _videoJs2['default'].getComponent('Component');
-
-// The amount of time to wait between checking the state of the buffer
-var bufferCheckInterval = 500;
-
-// returns true if a key has failed to download within a certain amount of retries
-var keyFailed = function keyFailed(key) {
- return key.retries && key.retries >= 2;
-};
-
-/**
- * Returns the CSS value for the specified property on an element
- * using `getComputedStyle`. Firefox has a long-standing issue where
- * getComputedStyle() may return null when running in an iframe with
- * `display: none`.
- * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397
- */
-var safeGetComputedStyle = function safeGetComputedStyle(el, property) {
- var result = undefined;
-
- if (!el) {
- return '';
- }
-
- result = getComputedStyle(el);
- if (!result) {
- return '';
- }
-
- return result[property];
-};
-
-/**
- * Updates segment with information about its end-point in time and, optionally,
- * the segment duration if we have enough information to determine a segment duration
- * accurately.
- * @param playlist {object} a media playlist object
- * @param segmentIndex {number} the index of segment we last appended
- * @param segmentEnd {number} the known of the segment referenced by segmentIndex
- */
-var updateSegmentMetadata = function updateSegmentMetadata(playlist, segmentIndex, segmentEnd) {
- if (!playlist) {
- return;
- }
-
- var segment = playlist.segments[segmentIndex];
- var previousSegment = playlist.segments[segmentIndex - 1];
-
- if (segmentEnd && segment) {
- segment.end = segmentEnd;
-
- // fix up segment durations based on segment end data
- if (!previousSegment) {
- // first segment is always has a start time of 0 making its duration
- // equal to the segment end
- segment.duration = segment.end;
- } else if (previousSegment.end) {
- segment.duration = segment.end - previousSegment.end;
- }
- }
-};
-
-/**
- * Determines if we should call endOfStream on the media source based on the state
- * of the buffer or if appened segment was the final segment in the playlist.
- * @param playlist {object} a media playlist object
- * @param mediaSource {object} the MediaSource object
- * @param segmentIndex {number} the index of segment we last appended
- * @param currentBuffered {object} the buffered region that currentTime resides in
- * @return {boolean} whether the calling function should call endOfStream on the MediaSource
- */
-var detectEndOfStream = function detectEndOfStream(playlist, mediaSource, segmentIndex, currentBuffered) {
- if (!playlist) {
- return false;
- }
-
- var segments = playlist.segments;
-
- // determine a few boolean values to help make the branch below easier
- // to read
- var appendedLastSegment = segmentIndex === segments.length - 1;
- var bufferedToEnd = currentBuffered.length && segments[segments.length - 1].end <= currentBuffered.end(0);
-
- // if we've buffered to the end of the video, we need to call endOfStream
- // so that MediaSources can trigger the `ended` event when it runs out of
- // buffered data instead of waiting for me
- return playlist.endList && mediaSource.readyState === 'open' && (appendedLastSegment || bufferedToEnd);
-};
-
-var parseCodecs = function parseCodecs(codecs) {
- var result = {
- codecCount: 0,
- videoCodec: null,
- audioProfile: null
- };
-
- result.codecCount = codecs.split(',').length;
- result.codecCount = result.codecCount || 2;
-
- // parse the video codec but ignore the version
- result.videoCodec = /(^|\s|,)+(avc1)[^ ,]*/i.exec(codecs);
- result.videoCodec = result.videoCodec && result.videoCodec[2];
-
- // parse the last field of the audio codec
- result.audioProfile = /(^|\s|,)+mp4a.\d+\.(\d+)/i.exec(codecs);
- result.audioProfile = result.audioProfile && result.audioProfile[2];
-
- return result;
-};
-
-var filterBufferedRanges = function filterBufferedRanges(predicate) {
- return function (time) {
- var i = undefined;
- var ranges = [];
- var tech = this.tech_;
-
- // !!The order of the next two assignments is important!!
- // `currentTime` must be equal-to or greater-than the start of the
- // buffered range. Flash executes out-of-process so, every value can
- // change behind the scenes from line-to-line. By reading `currentTime`
- // after `buffered`, we ensure that it is always a current or later
- // value during playback.
- var buffered = tech.buffered();
-
- if (typeof time === 'undefined') {
- time = tech.currentTime();
- }
-
- // IE 11 has a bug where it will report a the video as fully buffered
- // before any data has been loaded. This is a work around where we
- // report a fully empty buffer until SourceBuffers have been created
- // which is after a segment has been loaded and transmuxed.
- if (!this.mediaSource || !this.mediaSource.mediaSource_ || !this.mediaSource.mediaSource_.sourceBuffers.length) {
- return _videoJs2['default'].createTimeRanges([]);
- }
-
- if (buffered && buffered.length) {
- // Search for a range containing the play-head
- for (i = 0; i < buffered.length; i++) {
- if (predicate(buffered.start(i), buffered.end(i), time)) {
- ranges.push([buffered.start(i), buffered.end(i)]);
- }
- }
- }
-
- return _videoJs2['default'].createTimeRanges(ranges);
- };
-};
-
-var HlsHandler = (function (_Component) {
- _inherits(HlsHandler, _Component);
-
- function HlsHandler(tech, options) {
- var _this = this;
-
- _classCallCheck(this, HlsHandler);
-
- _get(Object.getPrototypeOf(HlsHandler.prototype), 'constructor', this).call(this, tech);
- var _player = undefined;
-
- // tech.player() is deprecated but setup a reference to HLS for
- // backwards-compatibility
- if (tech.options_ && tech.options_.playerId) {
- _player = (0, _videoJs2['default'])(tech.options_.playerId);
- if (!_player.hls) {
- Object.defineProperty(_player, 'hls', {
- get: function get() {
- _videoJs2['default'].log.warn('player.hls is deprecated. Use player.tech.hls instead.');
- return _this;
- }
- });
- }
- }
- this.tech_ = tech;
- this.source_ = options.source;
- this.mode_ = options.mode;
- // the segment info object for a segment that is in the process of
- // being downloaded or processed
- this.pendingSegment_ = null;
-
- // start playlist selection at a reasonable bandwidth for
- // broadband internet
- // 0.5 Mbps
- this.bandwidth = options.bandwidth || 4194304;
- this.bytesReceived = 0;
-
- // loadingState_ tracks how far along the buffering process we
- // have been given permission to proceed. There are three possible
- // values:
- // - none: do not load playlists or segments
- // - meta: load playlists but not segments
- // - segments: load everything
- this.loadingState_ = 'none';
- if (this.tech_.preload() !== 'none') {
- this.loadingState_ = 'meta';
- }
-
- // periodically check if new data needs to be downloaded or
- // buffered data should be appended to the source buffer
- this.startCheckingBuffer_();
-
- this.on(this.tech_, 'seeking', function () {
- this.setCurrentTime(this.tech_.currentTime());
- });
- this.on(this.tech_, 'error', function () {
- this.stopCheckingBuffer_();
- });
-
- this.on(this.tech_, 'play', this.play);
- }
-
- /**
- * Attempts to find the buffered TimeRange that contains the specified
- * time, or where playback is currently happening if no specific time
- * is specified.
- * @param time (optional) {number} the time to filter on. Defaults to
- * currentTime.
- * @return a new TimeRanges object.
- */
-
- _createClass(HlsHandler, [{
- key: 'src',
- value: function src(_src) {
- var _this2 = this;
-
- var oldMediaPlaylist = undefined;
-
- // do nothing if the src is falsey
- if (!_src) {
- return;
- }
-
- this.mediaSource = new _videoJs2['default'].MediaSource({ mode: this.mode_ });
-
- // load the MediaSource into the player
- this.mediaSource.addEventListener('sourceopen', this.handleSourceOpen.bind(this));
-
- this.options_ = {};
- if (typeof this.source_.withCredentials !== 'undefined') {
- this.options_.withCredentials = this.source_.withCredentials;
- } else if (_videoJs2['default'].options.hls) {
- this.options_.withCredentials = _videoJs2['default'].options.hls.withCredentials;
- }
- this.playlists = new Hls.PlaylistLoader(this.source_.src, this.options_.withCredentials);
-
- this.tech_.one('canplay', this.setupFirstPlay.bind(this));
-
- this.playlists.on('loadedmetadata', function () {
- oldMediaPlaylist = _this2.playlists.media();
-
- // if this isn't a live video and preload permits, start
- // downloading segments
- if (oldMediaPlaylist.endList && _this2.tech_.preload() !== 'metadata' && _this2.tech_.preload() !== 'none') {
- _this2.loadingState_ = 'segments';
- }
-
- _this2.setupSourceBuffer_();
- _this2.setupFirstPlay();
- _this2.fillBuffer();
- _this2.tech_.trigger('loadedmetadata');
- });
-
- this.playlists.on('error', function () {
- _this2.blacklistCurrentPlaylist_(_this2.playlists.error);
- });
-
- this.playlists.on('loadedplaylist', function () {
- var updatedPlaylist = _this2.playlists.media();
- var seekable = undefined;
-
- if (!updatedPlaylist) {
- // select the initial variant
- _this2.playlists.media(_this2.selectPlaylist());
- return;
- }
-
- _this2.updateDuration(_this2.playlists.media());
-
- // update seekable
- seekable = _this2.seekable();
- if (_this2.duration() === Infinity && seekable.length !== 0) {
- _this2.mediaSource.addSeekableRange_(seekable.start(0), seekable.end(0));
- }
-
- oldMediaPlaylist = updatedPlaylist;
- });
-
- this.playlists.on('mediachange', function () {
- _this2.tech_.trigger({
- type: 'mediachange',
- bubbles: true
- });
- });
-
- // do nothing if the tech has been disposed already
- // this can occur if someone sets the src in player.ready(), for instance
- if (!this.tech_.el()) {
- return;
- }
-
- this.tech_.src(_videoJs2['default'].URL.createObjectURL(this.mediaSource));
- }
- }, {
- key: 'handleSourceOpen',
- value: function handleSourceOpen() {
- // Only attempt to create the source buffer if none already exist.
- // handleSourceOpen is also called when we are "re-opening" a source buffer
- // after `endOfStream` has been called (in response to a seek for instance)
- if (!this.sourceBuffer) {
- this.setupSourceBuffer_();
- }
-
- // if autoplay is enabled, begin playback. This is duplicative of
- // code in video.js but is required because play() must be invoked
- // *after* the media source has opened.
- // NOTE: moving this invocation of play() after
- // sourceBuffer.appendBuffer() below caused live streams with
- // autoplay to stall
- if (this.tech_.autoplay()) {
- this.play();
- }
- }
-
- /**
- * Blacklist playlists that are known to be codec or
- * stream-incompatible with the SourceBuffer configuration. For
- * instance, Media Source Extensions would cause the video element to
- * stall waiting for video data if you switched from a variant with
- * video and audio to an audio-only one.
- *
- * @param media {object} a media playlist compatible with the current
- * set of SourceBuffers. Variants in the current master playlist that
- * do not appear to have compatible codec or stream configurations
- * will be excluded from the default playlist selection algorithm
- * indefinitely.
- */
- }, {
- key: 'excludeIncompatibleVariants_',
- value: function excludeIncompatibleVariants_(media) {
- var master = this.playlists.master;
- var codecCount = 2;
- var videoCodec = null;
- var audioProfile = null;
- var codecs = undefined;
-
- if (media.attributes && media.attributes.CODECS) {
- codecs = parseCodecs(media.attributes.CODECS);
- videoCodec = codecs.videoCodec;
- audioProfile = codecs.audioProfile;
- codecCount = codecs.codecCount;
- }
- master.playlists.forEach(function (variant) {
- var variantCodecs = {
- codecCount: 2,
- videoCodec: null,
- audioProfile: null
- };
-
- if (variant.attributes && variant.attributes.CODECS) {
- variantCodecs = parseCodecs(variant.attributes.CODECS);
- }
-
- // if the streams differ in the presence or absence of audio or
- // video, they are incompatible
- if (variantCodecs.codecCount !== codecCount) {
- variant.excludeUntil = Infinity;
- }
-
- // if h.264 is specified on the current playlist, some flavor of
- // it must be specified on all compatible variants
- if (variantCodecs.videoCodec !== videoCodec) {
- variant.excludeUntil = Infinity;
- }
- // HE-AAC ("mp4a.40.5") is incompatible with all other versions of
- // AAC audio in Chrome 46. Don't mix the two.
- if (variantCodecs.audioProfile === '5' && audioProfile !== '5' || audioProfile === '5' && variantCodecs.audioProfile !== '5') {
- variant.excludeUntil = Infinity;
- }
- });
- }
- }, {
- key: 'setupSourceBuffer_',
- value: function setupSourceBuffer_() {
- var media = this.playlists.media();
- var mimeType = undefined;
-
- // wait until a media playlist is available and the Media Source is
- // attached
- if (!media || this.mediaSource.readyState !== 'open') {
- return;
- }
-
- // if the codecs were explicitly specified, pass them along to the
- // source buffer
- mimeType = 'video/mp2t';
- if (media.attributes && media.attributes.CODECS) {
- mimeType += '; codecs="' + media.attributes.CODECS + '"';
- }
- this.sourceBuffer = this.mediaSource.addSourceBuffer(mimeType);
-
- // exclude any incompatible variant streams from future playlist
- // selection
- this.excludeIncompatibleVariants_(media);
-
- // transition the sourcebuffer to the ended state if we've hit the end of
- // the playlist
- this.sourceBuffer.addEventListener('updateend', this.updateEndHandler_.bind(this));
- }
-
- /**
- * Seek to the latest media position if this is a live video and the
- * player and video are loaded and initialized.
- */
- }, {
- key: 'setupFirstPlay',
- value: function setupFirstPlay() {
- var seekable = undefined;
- var media = this.playlists.media();
-
- // check that everything is ready to begin buffering
-
- // 1) the video is a live stream of unknown duration
- if (this.duration() === Infinity &&
-
- // 2) the player has not played before and is not paused
- this.tech_.played().length === 0 && !this.tech_.paused() &&
-
- // 3) the Media Source and Source Buffers are ready
- this.sourceBuffer &&
-
- // 4) the active media playlist is available
- media &&
-
- // 5) the video element or flash player is in a readyState of
- // at least HAVE_FUTURE_DATA
- this.tech_.readyState() >= 1) {
-
- // trigger the playlist loader to start "expired time"-tracking
- this.playlists.trigger('firstplay');
-
- // seek to the latest media position for live videos
- seekable = this.seekable();
- if (seekable.length) {
- this.tech_.setCurrentTime(seekable.end(0));
- }
- }
- }
-
- /**
- * Begin playing the video.
- */
- }, {
- key: 'play',
- value: function play() {
- this.loadingState_ = 'segments';
-
- if (this.tech_.ended()) {
- this.tech_.setCurrentTime(0);
- }
-
- if (this.tech_.played().length === 0) {
- return this.setupFirstPlay();
- }
-
- // if the viewer has paused and we fell out of the live window,
- // seek forward to the earliest available position
- if (this.duration() === Infinity) {
- if (this.tech_.currentTime() < this.seekable().start(0)) {
- this.tech_.setCurrentTime(this.seekable().start(0));
- }
- }
- }
- }, {
- key: 'setCurrentTime',
- value: function setCurrentTime(currentTime) {
- var buffered = this.findBufferedRange_();
-
- if (!(this.playlists && this.playlists.media())) {
- // return immediately if the metadata is not ready yet
- return 0;
- }
-
- // it's clearly an edge-case but don't thrown an error if asked to
- // seek within an empty playlist
- if (!this.playlists.media().segments) {
- return 0;
- }
-
- // if the seek location is already buffered, continue buffering as
- // usual
- if (buffered && buffered.length) {
- return currentTime;
- }
-
- // if we are in the middle of appending a segment, let it finish up
- if (this.pendingSegment_ && this.pendingSegment_.buffered) {
- return currentTime;
- }
-
- this.lastSegmentLoaded_ = null;
-
- // cancel outstanding requests and buffer appends
- this.cancelSegmentXhr();
-
- // abort outstanding key requests, if necessary
- if (this.keyXhr_) {
- this.keyXhr_.aborted = true;
- this.cancelKeyXhr();
- }
-
- // begin filling the buffer at the new position
- this.fillBuffer(this.playlists.getMediaIndexForTime_(currentTime));
- }
- }, {
- key: 'duration',
- value: function duration() {
- var playlists = this.playlists;
-
- if (!playlists) {
- return 0;
- }
-
- if (this.mediaSource) {
- return this.mediaSource.duration;
- }
-
- return Hls.Playlist.duration(playlists.media());
- }
- }, {
- key: 'seekable',
- value: function seekable() {
- var media = undefined;
- var seekable = undefined;
-
- if (!this.playlists) {
- return _videoJs2['default'].createTimeRanges();
- }
- media = this.playlists.media();
- if (!media) {
- return _videoJs2['default'].createTimeRanges();
- }
-
- seekable = Hls.Playlist.seekable(media);
- if (seekable.length === 0) {
- return seekable;
- }
-
- // if the seekable start is zero, it may be because the player has
- // been paused for a long time and stopped buffering. in that case,
- // fall back to the playlist loader's running estimate of expired
- // time
- if (seekable.start(0) === 0) {
- return _videoJs2['default'].createTimeRanges([[this.playlists.expired_, this.playlists.expired_ + seekable.end(0)]]);
- }
-
- // seekable has been calculated based on buffering video data so it
- // can be returned directly
- return seekable;
- }
-
- /**
- * Update the player duration
- */
- }, {
- key: 'updateDuration',
- value: function updateDuration(playlist) {
- var _this3 = this;
-
- var oldDuration = this.mediaSource.duration;
- var newDuration = Hls.Playlist.duration(playlist);
- var buffered = this.tech_.buffered();
- var setDuration = function setDuration() {
- _this3.mediaSource.duration = newDuration;
- _this3.tech_.trigger('durationchange');
-
- _this3.mediaSource.removeEventListener('sourceopen', setDuration);
- };
-
- if (buffered.length > 0) {
- newDuration = Math.max(newDuration, buffered.end(buffered.length - 1));
- }
-
- // if the duration has changed, invalidate the cached value
- if (oldDuration !== newDuration) {
- // update the duration
- if (this.mediaSource.readyState !== 'open') {
- this.mediaSource.addEventListener('sourceopen', setDuration);
- } else if (!this.sourceBuffer || !this.sourceBuffer.updating) {
- this.mediaSource.duration = newDuration;
- this.tech_.trigger('durationchange');
- }
- }
- }
-
- /**
- * Clear all buffers and reset any state relevant to the current
- * source. After this function is called, the tech should be in a
- * state suitable for switching to a different video.
- */
- }, {
- key: 'resetSrc_',
- value: function resetSrc_() {
- this.cancelSegmentXhr();
- this.cancelKeyXhr();
-
- if (this.sourceBuffer && this.mediaSource.readyState === 'open') {
- this.sourceBuffer.abort();
- }
- }
- }, {
- key: 'cancelKeyXhr',
- value: function cancelKeyXhr() {
- if (this.keyXhr_) {
- this.keyXhr_.onreadystatechange = null;
- this.keyXhr_.abort();
- this.keyXhr_ = null;
- }
- }
- }, {
- key: 'cancelSegmentXhr',
- value: function cancelSegmentXhr() {
- if (this.segmentXhr_) {
- // Prevent error handler from running.
- this.segmentXhr_.onreadystatechange = null;
- this.segmentXhr_.abort();
- this.segmentXhr_ = null;
- }
-
- // clear out the segment being processed
- this.pendingSegment_ = null;
- }
-
- /**
- * Abort all outstanding work and cleanup.
- */
- }, {
- key: 'dispose',
- value: function dispose() {
- this.stopCheckingBuffer_();
-
- if (this.playlists) {
- this.playlists.dispose();
- }
-
- this.resetSrc_();
- _get(Object.getPrototypeOf(HlsHandler.prototype), 'dispose', this).call(this);
- }
-
- /**
- * Chooses the appropriate media playlist based on the current
- * bandwidth estimate and the player size.
- * @return the highest bitrate playlist less than the currently detected
- * bandwidth, accounting for some amount of bandwidth variance
- */
- }, {
- key: 'selectPlaylist',
- value: function selectPlaylist() {
- var effectiveBitrate = undefined;
- var sortedPlaylists = this.playlists.master.playlists.slice();
- var bandwidthPlaylists = [];
- var now = +new Date();
- var i = undefined;
- var variant = undefined;
- var bandwidthBestVariant = undefined;
- var resolutionPlusOne = undefined;
- var resolutionPlusOneAttribute = undefined;
- var resolutionBestVariant = undefined;
- var width = undefined;
- var height = undefined;
-
- sortedPlaylists.sort(Hls.comparePlaylistBandwidth);
-
- // filter out any playlists that have been excluded due to
- // incompatible configurations or playback errors
- sortedPlaylists = sortedPlaylists.filter(function (localVariant) {
- if (typeof localVariant.excludeUntil !== 'undefined') {
- return now >= localVariant.excludeUntil;
- }
- return true;
- });
-
- // filter out any variant that has greater effective bitrate
- // than the current estimated bandwidth
- i = sortedPlaylists.length;
- while (i--) {
- variant = sortedPlaylists[i];
-
- // ignore playlists without bandwidth information
- if (!variant.attributes || !variant.attributes.BANDWIDTH) {
- continue;
- }
-
- effectiveBitrate = variant.attributes.BANDWIDTH * bandwidthVariance;
-
- if (effectiveBitrate < this.bandwidth) {
- bandwidthPlaylists.push(variant);
-
- // since the playlists are sorted in ascending order by
- // bandwidth, the first viable variant is the best
- if (!bandwidthBestVariant) {
- bandwidthBestVariant = variant;
- }
- }
- }
-
- i = bandwidthPlaylists.length;
-
- // sort variants by resolution
- bandwidthPlaylists.sort(Hls.comparePlaylistResolution);
-
- // forget our old variant from above,
- // or we might choose that in high-bandwidth scenarios
- // (this could be the lowest bitrate rendition as we go through all of them above)
- variant = null;
-
- width = parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10);
- height = parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10);
-
- // iterate through the bandwidth-filtered playlists and find
- // best rendition by player dimension
- while (i--) {
- variant = bandwidthPlaylists[i];
-
- // ignore playlists without resolution information
- if (!variant.attributes || !variant.attributes.RESOLUTION || !variant.attributes.RESOLUTION.width || !variant.attributes.RESOLUTION.height) {
- continue;
- }
-
- // since the playlists are sorted, the first variant that has
- // dimensions less than or equal to the player size is the best
-
- var variantResolution = variant.attributes.RESOLUTION;
-
- if (variantResolution.width === width && variantResolution.height === height) {
- // if we have the exact resolution as the player use it
- resolutionPlusOne = null;
- resolutionBestVariant = variant;
- break;
- } else if (variantResolution.width < width && variantResolution.height < height) {
- // if both dimensions are less than the player use the
- // previous (next-largest) variant
- break;
- } else if (!resolutionPlusOne || variantResolution.width < resolutionPlusOneAttribute.width && variantResolution.height < resolutionPlusOneAttribute.height) {
- // If we still haven't found a good match keep a
- // reference to the previous variant for the next loop
- // iteration
-
- // By only saving variants if they are smaller than the
- // previously saved variant, we ensure that we also pick
- // the highest bandwidth variant that is just-larger-than
- // the video player
- resolutionPlusOne = variant;
- resolutionPlusOneAttribute = resolutionPlusOne.attributes.RESOLUTION;
- }
- }
-
- // fallback chain of variants
- return resolutionPlusOne || resolutionBestVariant || bandwidthBestVariant || sortedPlaylists[0];
- }
-
- /**
- * Periodically request new segments and append video data.
- */
- }, {
- key: 'checkBuffer_',
- value: function checkBuffer_() {
- // calling this method directly resets any outstanding buffer checks
- if (this.checkBufferTimeout_) {
- window.clearTimeout(this.checkBufferTimeout_);
- this.checkBufferTimeout_ = null;
- }
-
- this.fillBuffer();
- this.drainBuffer();
-
- // wait awhile and try again
- this.checkBufferTimeout_ = window.setTimeout(this.checkBuffer_.bind(this), bufferCheckInterval);
- }
-
- /**
- * Setup a periodic task to request new segments if necessary and
- * append bytes into the SourceBuffer.
- */
- }, {
- key: 'startCheckingBuffer_',
- value: function startCheckingBuffer_() {
- this.checkBuffer_();
- }
-
- /**
- * Stop the periodic task requesting new segments and feeding the
- * SourceBuffer.
- */
- }, {
- key: 'stopCheckingBuffer_',
- value: function stopCheckingBuffer_() {
- if (this.checkBufferTimeout_) {
- window.clearTimeout(this.checkBufferTimeout_);
- this.checkBufferTimeout_ = null;
- }
- }
-
- /**
- * Determines whether there is enough video data currently in the buffer
- * and downloads a new segment if the buffered time is less than the goal.
- * @param seekToTime (optional) {number} the offset into the downloaded segment
- * to seek to, in seconds
- */
- }, {
- key: 'fillBuffer',
- value: function fillBuffer(mediaIndex) {
- var tech = this.tech_;
- var currentTime = tech.currentTime();
- var hasBufferedContent = this.tech_.buffered().length !== 0;
- var currentBuffered = this.findBufferedRange_();
- var outsideBufferedRanges = !(currentBuffered && currentBuffered.length);
- var currentBufferedEnd = 0;
- var bufferedTime = 0;
- var segment = undefined;
- var segmentInfo = undefined;
- var segmentTimestampOffset = undefined;
-
- // if preload is set to "none", do not download segments until playback is requested
- if (this.loadingState_ !== 'segments') {
- return;
- }
-
- // if a video has not been specified, do nothing
- if (!tech.currentSrc() || !this.playlists) {
- return;
- }
-
- // if there is a request already in flight, do nothing
- if (this.segmentXhr_) {
- return;
- }
-
- // wait until the buffer is up to date
- if (this.pendingSegment_) {
- return;
- }
-
- // if no segments are available, do nothing
- if (this.playlists.state === 'HAVE_NOTHING' || !this.playlists.media() || !this.playlists.media().segments) {
- return;
- }
-
- // if a playlist switch is in progress, wait for it to finish
- if (this.playlists.state === 'SWITCHING_MEDIA') {
- return;
- }
-
- if (typeof mediaIndex === 'undefined') {
- if (currentBuffered && currentBuffered.length) {
- currentBufferedEnd = currentBuffered.end(0);
- mediaIndex = this.playlists.getMediaIndexForTime_(currentBufferedEnd);
- bufferedTime = Math.max(0, currentBufferedEnd - currentTime);
-
- // if there is plenty of content in the buffer and we're not
- // seeking, relax for awhile
- if (bufferedTime >= Hls.GOAL_BUFFER_LENGTH) {
- return;
- }
- } else {
- mediaIndex = this.playlists.getMediaIndexForTime_(this.tech_.currentTime());
- }
- }
- segment = this.playlists.media().segments[mediaIndex];
-
- // if the video has finished downloading
- if (!segment) {
- return;
- }
-
- // we have entered a state where we are fetching the same segment,
- // try to walk forward
- if (this.lastSegmentLoaded_ && this.playlistUriToUrl(this.lastSegmentLoaded_.uri) === this.playlistUriToUrl(segment.uri) && this.lastSegmentLoaded_.byterange === segment.byterange) {
- return this.fillBuffer(mediaIndex + 1);
- }
-
- // package up all the work to append the segment
- segmentInfo = {
- // resolve the segment URL relative to the playlist
- uri: this.playlistUriToUrl(segment.uri),
- // the segment's mediaIndex & mediaSequence at the time it was requested
- mediaIndex: mediaIndex,
- mediaSequence: this.playlists.media().mediaSequence,
- // the segment's playlist
- playlist: this.playlists.media(),
- // The state of the buffer when this segment was requested
- currentBufferedEnd: currentBufferedEnd,
- // unencrypted bytes of the segment
- bytes: null,
- // when a key is defined for this segment, the encrypted bytes
- encryptedBytes: null,
- // optionally, the decrypter that is unencrypting the segment
- decrypter: null,
- // the state of the buffer before a segment is appended will be
- // stored here so that the actual segment duration can be
- // determined after it has been appended
- buffered: null,
- // The target timestampOffset for this segment when we append it
- // to the source buffer
- timestampOffset: null
- };
-
- if (mediaIndex > 0) {
- segmentTimestampOffset = Hls.Playlist.duration(segmentInfo.playlist, segmentInfo.playlist.mediaSequence + mediaIndex) + this.playlists.expired_;
- }
-
- if (this.tech_.seeking() && outsideBufferedRanges) {
- // If there are discontinuities in the playlist, we can't be sure of anything
- // related to time so we reset the timestamp offset and start appending data
- // anew on every seek
- if (segmentInfo.playlist.discontinuityStarts.length) {
- segmentInfo.timestampOffset = segmentTimestampOffset;
- }
- } else if (segment.discontinuity && currentBuffered.length) {
- // If we aren't seeking and are crossing a discontinuity, we should set
- // timestampOffset for new segments to be appended the end of the current
- // buffered time-range
- segmentInfo.timestampOffset = currentBuffered.end(0);
- } else if (!hasBufferedContent && this.tech_.currentTime() > 0.05) {
- // If we are trying to play at a position that is not zero but we aren't
- // currently seeking according to the video element
- segmentInfo.timestampOffset = segmentTimestampOffset;
- }
-
- this.loadSegment(segmentInfo);
- }
- }, {
- key: 'playlistUriToUrl',
- value: function playlistUriToUrl(segmentRelativeUrl) {
- var playListUrl = undefined;
-
- // resolve the segment URL relative to the playlist
- if (this.playlists.media().uri === this.source_.src) {
- playListUrl = (0, _resolveUrl2['default'])(this.source_.src, segmentRelativeUrl);
- } else {
- playListUrl = (0, _resolveUrl2['default'])((0, _resolveUrl2['default'])(this.source_.src, this.playlists.media().uri || ''), segmentRelativeUrl);
- }
- return playListUrl;
- }
-
- /*
- * Turns segment byterange into a string suitable for use in
- * HTTP Range requests
- */
- }, {
- key: 'byterangeStr_',
- value: function byterangeStr_(byterange) {
- var byterangeStart = undefined;
- var byterangeEnd = undefined;
-
- // `byterangeEnd` is one less than `offset + length` because the HTTP range
- // header uses inclusive ranges
- byterangeEnd = byterange.offset + byterange.length - 1;
- byterangeStart = byterange.offset;
- return 'bytes=' + byterangeStart + '-' + byterangeEnd;
- }
-
- /*
- * Defines headers for use in the xhr request for a particular segment.
- */
- }, {
- key: 'segmentXhrHeaders_',
- value: function segmentXhrHeaders_(segment) {
- var headers = {};
-
- if ('byterange' in segment) {
- headers.Range = this.byterangeStr_(segment.byterange);
- }
- return headers;
- }
-
- /*
- * Sets `bandwidth`, `segmentXhrTime`, and appends to the `bytesReceived.
- * Expects an object with:
- * * `roundTripTime` - the round trip time for the request we're setting the time for
- * * `bandwidth` - the bandwidth we want to set
- * * `bytesReceived` - amount of bytes downloaded
- * `bandwidth` is the only required property.
- */
- }, {
- key: 'setBandwidth',
- value: function setBandwidth(localXhr) {
- // calculate the download bandwidth
- this.segmentXhrTime = localXhr.roundTripTime;
- this.bandwidth = localXhr.bandwidth;
- this.bytesReceived += localXhr.bytesReceived || 0;
-
- this.tech_.trigger('bandwidthupdate');
- }
-
- /*
- * Blacklists a playlist when an error occurs for a set amount of time
- * making it unavailable for selection by the rendition selection algorithm
- * and then forces a new playlist (rendition) selection.
- */
- }, {
- key: 'blacklistCurrentPlaylist_',
- value: function blacklistCurrentPlaylist_(error) {
- var currentPlaylist = undefined;
- var nextPlaylist = undefined;
-
- // If the `error` was generated by the playlist loader, it will contain
- // the playlist we were trying to load (but failed) and that should be
- // blacklisted instead of the currently selected playlist which is likely
- // out-of-date in this scenario
- currentPlaylist = error.playlist || this.playlists.media();
-
- // If there is no current playlist, then an error occurred while we were
- // trying to load the master OR while we were disposing of the tech
- if (!currentPlaylist) {
- this.error = error;
- return this.mediaSource.endOfStream('network');
- }
-
- // Blacklist this playlist
- currentPlaylist.excludeUntil = Date.now() + blacklistDuration;
-
- // Select a new playlist
- nextPlaylist = this.selectPlaylist();
-
- if (nextPlaylist) {
- _videoJs2['default'].log.warn('Problem encountered with the current ' + 'HLS playlist. Switching to another playlist.');
-
- return this.playlists.media(nextPlaylist);
- }
- _videoJs2['default'].log.warn('Problem encountered with the current ' + 'HLS playlist. No suitable alternatives found.');
- // We have no more playlists we can select so we must fail
- this.error = error;
- return this.mediaSource.endOfStream('network');
- }
- }, {
- key: 'loadSegment',
- value: function loadSegment(segmentInfo) {
- var _this4 = this;
-
- var segment = segmentInfo.playlist.segments[segmentInfo.mediaIndex];
- var removeToTime = 0;
- var seekable = this.seekable();
- var currentTime = this.tech_.currentTime();
-
- // Chrome has a hard limit of 150mb of
- // buffer and a very conservative "garbage collector"
- // We manually clear out the old buffer to ensure
- // we don't trigger the QuotaExceeded error
- // on the source buffer during subsequent appends
- if (this.sourceBuffer && !this.sourceBuffer.updating) {
- // If we have a seekable range use that as the limit for what can be removed safely
- // otherwise remove anything older than 1 minute before the current play head
- if (seekable.length && seekable.start(0) > 0 && seekable.start(0) < currentTime) {
- removeToTime = seekable.start(0);
- } else {
- removeToTime = currentTime - 60;
- }
-
- if (removeToTime > 0) {
- this.sourceBuffer.remove(0, removeToTime);
- }
- }
-
- // if the segment is encrypted, request the key
- if (segment.key) {
- this.fetchKey_(segment);
- }
-
- // request the next segment
- this.segmentXhr_ = Hls.xhr({
- uri: segmentInfo.uri,
- responseType: 'arraybuffer',
- withCredentials: this.source_.withCredentials,
- // Set xhr timeout to 150% of the segment duration to allow us
- // some time to switch renditions in the event of a catastrophic
- // decrease in network performance or a server issue.
- timeout: segment.duration * 1.5 * 1000,
- headers: this.segmentXhrHeaders_(segment)
- }, function (error, request) {
- // This is a timeout of a previously aborted segment request
- // so simply ignore it
- if (!_this4.segmentXhr_ || request !== _this4.segmentXhr_) {
- return;
- }
-
- // the segment request is no longer outstanding
- _this4.segmentXhr_ = null;
-
- // if a segment request times out, we may have better luck with another playlist
- if (request.timedout) {
- _this4.bandwidth = 1;
- return _this4.playlists.media(_this4.selectPlaylist());
- }
-
- // otherwise, trigger a network error
- if (!request.aborted && error) {
- return _this4.blacklistCurrentPlaylist_({
- status: request.status,
- message: 'HLS segment request error at URL: ' + segmentInfo.uri,
- code: request.status >= 500 ? 4 : 2
- });
- }
-
- // stop processing if the request was aborted
- if (!request.response) {
- return;
- }
-
- _this4.lastSegmentLoaded_ = segment;
- _this4.setBandwidth(request);
-
- if (segment.key) {
- segmentInfo.encryptedBytes = new Uint8Array(request.response);
- } else {
- segmentInfo.bytes = new Uint8Array(request.response);
- }
-
- _this4.pendingSegment_ = segmentInfo;
-
- _this4.tech_.trigger('progress');
- _this4.drainBuffer();
-
- // figure out what stream the next segment should be downloaded from
- // with the updated bandwidth information
- _this4.playlists.media(_this4.selectPlaylist());
- });
- }
- }, {
- key: 'drainBuffer',
- value: function drainBuffer() {
- var segmentInfo = undefined;
- var mediaIndex = undefined;
- var playlist = undefined;
- var bytes = undefined;
- var segment = undefined;
- var decrypter = undefined;
- var segIv = undefined;
-
- // if the buffer is empty or the source buffer hasn't been created
- // yet, do nothing
- if (!this.pendingSegment_ || !this.sourceBuffer) {
- return;
- }
-
- // the pending segment has already been appended and we're waiting
- // for updateend to fire
- if (this.pendingSegment_.buffered) {
- return;
- }
-
- // we can't append more data if the source buffer is busy processing
- // what we've already sent
- if (this.sourceBuffer.updating) {
- return;
- }
-
- segmentInfo = this.pendingSegment_;
- mediaIndex = segmentInfo.mediaIndex;
- playlist = segmentInfo.playlist;
- bytes = segmentInfo.bytes;
- segment = playlist.segments[mediaIndex];
-
- if (segment.key && !bytes) {
- // this is an encrypted segment
- // if the key download failed, we want to skip this segment
- // but if the key hasn't downloaded yet, we want to try again later
- if (keyFailed(segment.key)) {
- return this.blacklistCurrentPlaylist_({
- message: 'HLS segment key request error.',
- code: 4
- });
- } else if (!segment.key.bytes) {
- // waiting for the key bytes, try again later
- return;
- } else if (segmentInfo.decrypter) {
- // decryption is in progress, try again later
- return;
- }
- // if the media sequence is greater than 2^32, the IV will be incorrect
- // assuming 10s segments, that would be about 1300 years
- segIv = segment.key.iv || new Uint32Array([0, 0, 0, mediaIndex + playlist.mediaSequence]);
-
- // create a decrypter to incrementally decrypt the segment
- decrypter = new Hls.Decrypter(segmentInfo.encryptedBytes, segment.key.bytes, segIv, function (error, localBytes) {
- if (error) {
- _videoJs2['default'].log.warn(error);
- }
- segmentInfo.bytes = localBytes;
- });
- segmentInfo.decrypter = decrypter;
- return;
- }
-
- this.pendingSegment_.buffered = this.tech_.buffered();
-
- if (segmentInfo.timestampOffset !== null) {
- this.sourceBuffer.timestampOffset = segmentInfo.timestampOffset;
- }
-
- // the segment is asynchronously added to the current buffered data
- this.sourceBuffer.appendBuffer(bytes);
- }
- }, {
- key: 'updateEndHandler_',
- value: function updateEndHandler_() {
- var segmentInfo = this.pendingSegment_;
- var playlist = undefined;
- var currentMediaIndex = undefined;
- var currentBuffered = undefined;
- var seekable = undefined;
- var timelineUpdate = undefined;
- var isEndOfStream = undefined;
-
- // stop here if the update errored or was aborted
- if (!segmentInfo) {
- this.pendingSegment_ = null;
- return;
- }
-
- // In Firefox, the updateend event is triggered for both removing from the buffer and
- // adding to the buffer. To prevent this code from executing on removals, we wait for
- // segmentInfo to have a filled in buffered value before we continue processing.
- if (!segmentInfo.buffered) {
- return;
- }
-
- this.pendingSegment_ = null;
-
- playlist = segmentInfo.playlist;
- currentMediaIndex = segmentInfo.mediaIndex + (segmentInfo.mediaSequence - playlist.mediaSequence);
- currentBuffered = this.findBufferedRange_();
- isEndOfStream = detectEndOfStream(playlist, this.mediaSource, currentMediaIndex, currentBuffered);
-
- // if we switched renditions don't try to add segment timeline
- // information to the playlist
- if (segmentInfo.playlist.uri !== this.playlists.media().uri) {
- if (isEndOfStream) {
- return this.mediaSource.endOfStream();
- }
- return this.fillBuffer();
- }
-
- // when seeking to the beginning of the seekable range, it's
- // possible that imprecise timing information may cause the seek to
- // end up earlier than the start of the range
- // in that case, seek again
- seekable = this.seekable();
- if (this.tech_.seeking() && currentBuffered.length === 0) {
- if (seekable.length && this.tech_.currentTime() < seekable.start(0)) {
- var next = this.findNextBufferedRange_();
-
- if (next.length) {
- _videoJs2['default'].log('tried seeking to', this.tech_.currentTime(), 'but that was too early, retrying at', next.start(0));
- this.tech_.setCurrentTime(next.start(0) + TIME_FUDGE_FACTOR);
- }
- }
- }
-
- timelineUpdate = Hls.findSoleUncommonTimeRangesEnd_(segmentInfo.buffered, this.tech_.buffered());
-
- // Update segment meta-data (duration and end-point) based on timeline
- updateSegmentMetadata(playlist, currentMediaIndex, timelineUpdate);
-
- // If we decide to signal the end of stream, then we can return instead
- // of trying to fetch more segments
- if (isEndOfStream) {
- return this.mediaSource.endOfStream();
- }
-
- if (timelineUpdate !== null || segmentInfo.buffered.length !== this.tech_.buffered().length) {
- this.updateDuration(playlist);
- // check if it's time to download the next segment
- this.fillBuffer();
- return;
- }
-
- // the last segment append must have been entirely in the
- // already buffered time ranges. just buffer forward until we
- // find a segment that adds to the buffered time ranges and
- // improves subsequent media index calculations.
- this.fillBuffer(currentMediaIndex + 1);
- return;
- }
-
- /**
- * Attempt to retrieve the key for a particular media segment.
- */
- }, {
- key: 'fetchKey_',
- value: function fetchKey_(segment) {
- var _this5 = this;
-
- var key = undefined;
- var settings = undefined;
- var receiveKey = undefined;
-
- // if there is a pending XHR or no segments, don't do anything
- if (this.keyXhr_) {
- return;
- }
-
- settings = this.options_;
-
- /**
- * Handle a key XHR response.
- */
- receiveKey = function (keyRecieved) {
- return function (error, request) {
- var view = undefined;
-
- _this5.keyXhr_ = null;
-
- if (error || !request.response || request.response.byteLength !== 16) {
- keyRecieved.retries = keyRecieved.retries || 0;
- keyRecieved.retries++;
- if (!request.aborted) {
- // try fetching again
- _this5.fetchKey_(segment);
- }
- return;
- }
-
- view = new DataView(request.response);
- keyRecieved.bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);
-
- // check to see if this allows us to make progress buffering now
- _this5.checkBuffer_();
- };
- };
-
- key = segment.key;
-
- // nothing to do if this segment is unencrypted
- if (!key) {
- return;
- }
-
- // request the key if the retry limit hasn't been reached
- if (!key.bytes && !keyFailed(key)) {
- this.keyXhr_ = Hls.xhr({
- uri: this.playlistUriToUrl(key.uri),
- responseType: 'arraybuffer',
- withCredentials: settings.withCredentials
- }, receiveKey(key));
- return;
- }
- }
- }]);
-
- return HlsHandler;
-})(Component);
-
-exports['default'] = HlsHandler;
-HlsHandler.prototype.findBufferedRange_ = filterBufferedRanges(function (start, end, time) {
- return start - TIME_FUDGE_FACTOR <= time && end + TIME_FUDGE_FACTOR >= time;
-});
-/**
- * Returns the TimeRanges that begin at or later than the specified
- * time.
- * @param time (optional) {number} the time to filter on. Defaults to
- * currentTime.
- * @return a new TimeRanges object.
- */
-HlsHandler.prototype.findNextBufferedRange_ = filterBufferedRanges(function (start, end, time) {
- return start - TIME_FUDGE_FACTOR >= time;
-});
-
-/**
- * The Source Handler object, which informs video.js what additional
- * MIME types are supported and sets up playback. It is registered
- * automatically to the appropriate tech based on the capabilities of
- * the browser it is running in. It is not necessary to use or modify
- * this object in normal usage.
- */
-var HlsSourceHandler = function HlsSourceHandler(mode) {
- return {
- canHandleSource: function canHandleSource(srcObj) {
- return HlsSourceHandler.canPlayType(srcObj.type);
- },
- handleSource: function handleSource(source, tech) {
- if (mode === 'flash') {
- // We need to trigger this asynchronously to give others the chance
- // to bind to the event when a source is set at player creation
- tech.setTimeout(function () {
- tech.trigger('loadstart');
- }, 1);
- }
- tech.hls = new HlsHandler(tech, {
- source: source,
- mode: mode
- });
- tech.hls.src(source.src);
- return tech.hls;
- },
- canPlayType: function canPlayType(type) {
- return HlsSourceHandler.canPlayType(type);
- }
- };
-};
-
-HlsSourceHandler.canPlayType = function (type) {
- var mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i;
-
- // favor native HLS support if it's available
- if (Hls.supportsNativeHls) {
- return false;
- }
- return mpegurlRE.test(type);
-};
-
-if (typeof _videoJs2['default'].MediaSource === 'undefined' || typeof _videoJs2['default'].URL === 'undefined') {
- _videoJs2['default'].MediaSource = _videojsContribMediaSources.MediaSource;
- _videoJs2['default'].URL = _videojsContribMediaSources.URL;
-}
-
-// register source handlers with the appropriate techs
-if (_videojsContribMediaSources.MediaSource.supportsNativeMediaSources()) {
- _videoJs2['default'].getComponent('Html5').registerSourceHandler(HlsSourceHandler('html5'));
-}
-if (window.Uint8Array) {
- _videoJs2['default'].getComponent('Flash').registerSourceHandler(HlsSourceHandler('flash'));
-}
-
-_videoJs2['default'].HlsHandler = HlsHandler;
-_videoJs2['default'].HlsSourceHandler = HlsSourceHandler;
-_videoJs2['default'].Hls = Hls;
-_videoJs2['default'].m3u8 = _m3u82['default'];
-
-exports['default'] = {
- Hls: Hls,
- HlsHandler: HlsHandler,
- HlsSourceHandler: HlsSourceHandler
-};
-module.exports = exports['default'];
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./bin-utils":1,"./decrypter":5,"./m3u8":6,"./playlist":11,"./playlist-loader":10,"./resolve-url":12,"./xhr":14,"videojs-contrib-media-sources":28}]},{},[51])(51)
-}); \ No newline at end of file
diff --git a/web/stream.gathering.org/resources/swf/GrindPlayer.swf b/web/stream.gathering.org/resources/swf/GrindPlayer.swf
deleted file mode 100644
index 3a55fb7..0000000
--- a/web/stream.gathering.org/resources/swf/GrindPlayer.swf
+++ /dev/null
Binary files differ
diff --git a/web/stream.gathering.org/streamlib/stream.pm b/web/stream.gathering.org/streamlib/stream.pm
deleted file mode 100644
index c28136e..0000000
--- a/web/stream.gathering.org/streamlib/stream.pm
+++ /dev/null
@@ -1,36 +0,0 @@
-package stream;
-use strict;
-use warnings;
-
-BEGIN {
- use Exporter();
-
- our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
- @ISA = qw(Exporter);
- $VERSION = 1.00;
- @EXPORT = qw(&is_ip_local);
-
-}
-
-sub is_ip_local($$$) {
- my $clip = shift;
- my $v4net = shift;
- my $v6net = shift;
- return 0 unless defined($clip);
-
- my $is_local = 0;
- if ($clip =~ m/\:/){
- if (NetAddr::IP->new($clip)->within($v6net)){
- $is_local = 1;
- }
- } else {
- if (NetAddr::IP->new($clip)->within($v4net)){
- $is_local = 1;
- }
- }
- return $is_local;
-}
-
-
-1;
diff --git a/web/stream.gathering.org/streamlib/stream/config.pm b/web/stream.gathering.org/streamlib/stream/config.pm
deleted file mode 100644
index c07d783..0000000
--- a/web/stream.gathering.org/streamlib/stream/config.pm
+++ /dev/null
@@ -1,207 +0,0 @@
-package stream::config;
-use strict;
-use warnings;
-use NetAddr::IP;
-
-our $v4net = NetAddr::IP->new("151.216.128.0/17");
-our $v6net = NetAddr::IP->new("2a02:ed02::/32");
-our $multicast = "udp://\@233.191.12.1";
-our $video_url = "http://cubemap.tg16.gathering.org/event.flv";
-our $video_url_mp4 = "http://cubemap.tg16.gathering.org/event.mp4";
-our $video_url_fallback = "http://stream.tg16.gathering.org/hls/event.m3u8";
-our $tg = 16;
-our $tg_full = 2016;
-
-
-# priority = sorting order in streaming list
-# port , "post port number"
-# has_external , shows on OVH/.fr reflector if set
-# external , replaces static url link
-# source , video source pew pew
-# title , title doh \:D/
-our %streams = (
- 'event-hd' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 20,
- 'port' => 80,
- 'main_url' => 'http://cubemap.tg15.gathering.org/event.flv',
- 'ts_enabled' => 1,
- 'online' => 0,
- 'external' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::15]:2015',
- 'source' => 'Event',
- 'title' => 'Event HD (720p50 H.264) 6Mbit/s'
- },
- 'creativia-hd' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 100,
- 'port' => 80,
- 'main_url' => 'http://cubemap.tg15.gathering.org/creativia.flv',
- 'ts_enabled' => 1,
- 'online' => 0,
- 'external' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::15]:2015',
- 'source' => 'Event',
- 'title' => 'Creativia HD (1080p50 H.264) 10Mbit/s'
- },
- 'game-hd' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 110,
- 'port' => 80,
- 'main_url' => 'http://cubemap.tg15.gathering.org/game.flv',
- 'ts_enabled' => 1,
- 'online' => 0,
- 'external' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::15]:2015',
- 'source' => 'Event',
- 'title' => 'Game HD (720p50 H.264) 6Mbit/s'
- },
- 'event-sd' => {
- 'type' => 'event',
- 'quality' => 'sd',
- 'priority' => 24,
- 'port' => 80,
- 'online' => 0,
- 'main_url' => '/event-sd.ts',
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::14]',
- 'source' => 'Event',
- 'title' => 'Event SD (576p) (2mbps)'
- },
- 'event-superlow' => {
- 'type' => 'event',
- 'quality' => 'sd',
- 'priority' => 25,
- 'port' => 80,
- 'online' => 0,
- 'main_url' => '/event-superlow.ts',
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::16]',
- 'source' => 'Event',
- 'title' => 'Event Superlow SD (360p) (500kbit)'
- },
-# 'event-flash' => {
-# 'type' => 'event',
-# 'quality' => 'sd',
-# 'priority' => 25,
-# 'interlaced' => 0,
-# 'external' => 1,
-# 'main_url' => 'http://www.gathering.org/tg13/no/live-tv/',
-# 'source' => 'Event',
-# 'title' => 'Event SD (gathering.org flash player)',
-# },
- 'roofcam-raw' => {
- 'type' => 'camera',
- 'quality' => 'hd',
- 'priority' => 118,
- 'main_url' => "/roofcam.ts",
- 'port' => 80,
- 'ts_enabled' => 0,
- 'interlaced' => 1,
- 'online' => 0,
- 'has_multicast' => 0,
- #'multicast_ip' => "udp://\@[ff7e:a40:2a02:ed02:ffff::15]",
- 'source' => 'Tech',
- 'title' => 'Webcam Roof (HD) (1536x1536 H.264) 8mbps',
- },
-
- 'south-raw' => {
- 'type' => 'camera',
- 'quality' => 'hd',
- 'priority' => 40,
- 'main_url' => "http://cubemap.tg16.gathering.org/southcam.flv", # <-- In use (Need to rebuild row 67 in index.pl)
- 'fallback_url' => 'http://stream.tg16.gathering.org/hls/southcam.m3u8',
- 'port' => 80,
- 'ts_enabled' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'external' => 1, # <-- In use (Need to rebuild row 67 in index.pl)
- 'online' => 1,
-# 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]",
- 'source' => 'Tech',
- 'title' => "Webcam South (720p H.264 6Mbit/s)",
- },
-
- 'noccam-raw' => {
- 'type' => 'camera',
- 'quality' => 'hd',
- 'priority' => 130,
- 'main_url' => 'http://cubemap.tg16.gathering.org/noccam.flv',
- 'fallback_url' => 'http://stream.tg16.gathering.org/hls/noccam.m3u8',
- 'port' => 80, # <-- Safe to remove
- 'external' => 1,
- 'ts_enabled' => 1,
- 'has_multicast' => 0, # <-- Safe to remove
- 'interlaced' => 0, # <-- Safe to remove
- 'online' => 1,
- 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::18]:2018",# <-- Safe to remove
- 'source' => "Tech", # <-- Safe to remove
- 'title' => "Webcam NOC (720p H.264 6Mbit/s)"
- },
-
- 'Event' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 12,
- 'main_url' => 'http://cubemap.tg16.gathering.org/event.flv',
- 'mp4_url' => 'http://cubemap.tg16.gathering.org/event.mp4',
- 'fallback_url' => 'http://stream.tg16.gathering.org/hls/event.m3u8',
- 'port' => 80,
- 'ts_enabled' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'external' => 1, # <-- In use (Need to rebuild row 67 in index.pl)
- 'online' => 1,
-# 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]",
- 'source' => 'Tech',
- 'title' => "Event/Stage (720p H.264 6Mbit/s)",
- },
-
- 'Game' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 13,
- 'main_url' => 'http://cubemap.tg16.gathering.org/game.flv',
- 'fallback_url' => 'http://stream.tg16.gathering.org/hls/game.m3u8',
- 'port' => 80,
- 'ts_enabled' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'external' => 1, # <-- In use (Need to rebuild row 67 in index.pl)
- 'online' => 0,
-# 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]",
- 'source' => 'Tech',
- 'title' => "Game (720p H.264 6Mbit/s)",
- },
-
- 'Creative' => {
- 'type' => 'event',
- 'quality' => 'hd',
- 'priority' => 14,
- 'main_url' => 'http://cubemap.tg16.gathering.org/creativia.flv',
- 'fallback_url' => 'http://stream.tg16.gathering.org/hls/creativia.m3u8',
- 'port' => 80,
- 'ts_enabled' => 1,
- 'interlaced' => 0,
- 'has_multicast' => 0,
- 'external' => 1, # <-- In use (Need to rebuild row 67 in index.pl)
- 'online' => 1,
-# 'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]",
- 'source' => 'Tech',
- 'title' => "Creative (720p H.264 6Mbit/s)",
- }
-
-);
-
-1;