Changes requested for 6/22
* Reverted tab name nage back to original 3
* Changed heading in table to Select All
* Adjusted timeout period down to 500ms
* Lots of code formatting cleanup (Automated) (mostly whitespace)
* Moved catalog-dev back to catalog and removed gulp/build scripts. No
longer needed, firefox no longer has issues with scripts.
* Moved config back into the folder to reduce cluter now that there aren't
two versions of the release
* Removed unneeded .gitignores
Change-Id: I943d7796ca6317b4e890b666adea12707b1a8775
diff --git a/client/catalog/config-example.json b/client/catalog/config-example.json
new file mode 100644
index 0000000..18c782e
--- /dev/null
+++ b/client/catalog/config-example.json
@@ -0,0 +1,18 @@
+{
+ "global": {
+ "catalogPrefix": "/catalog",
+ "faceConfig": {
+ "host": "atmos-nwsc.ucar.edu",
+ "port": 9696
+ }
+ },
+ "retrieval": {
+ "demoKey": {
+ "pub": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuAmnWYKE7E8G+hyy4TiTU7t91KyIGvglEeT6HWEkW4LKzXLO22a1jVS9+yP96I6vp7N5vpS1t7oXtgWuzkO+O85u6gfbvwp+67zJe2I89eHO4dmNnP4fx/j7WcCUCyzZfbyW67h5IoouoBIdQge2Xdvh9rFdex9UUhyjEZv5676zlcqlhz8xGBrJmQHsqpD9ijY1XhKBvoSIoQ0ZKkpmwVk8QYM9PbjUqzSQBj4aYXS+BPV6aRudVvyDt2DBXp2FNP0CGrosCXKnSl4Yv8BYp0k0RmFZDuJuntLb/XIvPEfMX5li7g3zHzAlIJIVSwT+FRkd3H5cECFSIZFUYIuSQQIDAQAB",
+ "priv": "MIIEpQIBAAKCAQEAuAmnWYKE7E8G+hyy4TiTU7t91KyIGvglEeT6HWEkW4LKzXLO22a1jVS9+yP96I6vp7N5vpS1t7oXtgWuzkO+O85u6gfbvwp+67zJe2I89eHO4dmNnP4fx/j7WcCUCyzZfbyW67h5IoouoBIdQge2Xdvh9rFdex9UUhyjEZv5676zlcqlhz8xGBrJmQHsqpD9ijY1XhKBvoSIoQ0ZKkpmwVk8QYM9PbjUqzSQBj4aYXS+BPV6aRudVvyDt2DBXp2FNP0CGrosCXKnSl4Yv8BYp0k0RmFZDuJuntLb/XIvPEfMX5li7g3zHzAlIJIVSwT+FRkd3H5cECFSIZFUYIuSQQIDAQABAoIBAQCKBftzfxavn6lM5T8m+GZN0vzRBsBg8Z/jpsYKSLOayiHNKYCIPaSFpXuCIYEo6/JDJLB2xVLvwupLgkGSwm2mrvCyJkihI38Cz6iQF6I+iia9bYrupgwxzsK7klm1c+J9kXXivYxj4hyLwmoc/mnARMtYV7cTQvDbUEzgRQmPykWKBv6Y0SL1WprfiRfKIMwSqQk91ffj6whKxBLAuUdseVBmo/ivLPq0a+wDrcvaJAxSB4eIwCHzAugkRA/NoK0vG3mra0lK5jvQrcNIuffxNAnresDVDTnYRc42etjePLAhlpeK/4sjYE/wPdeP8yzLHUg/hsSpAPIjLXJNZqUBAoGBANxPmUQNf1lGHo/nLY3dVMD3+kYNnTUD8XwS81qdg8/dNyF8t+7DOdJ1j7Itb+zGA1XXAGfTm6JoUG+eKKR2OSuyZcxygpOgzxAFanXKhTWZsKbG70xNmX0sOAEhtTGsgFTEGEv977MwIlFa6n2bsp3Luj/AGmvNsOYvBDPXOklxAoGBANXZyXAaE7M5JALusLuEFxLGvWVz6TRdQ//c+FWvKrnh+nFlTlAPpDvlaPJJca8ViNevxJ2UhGtbENXAqgwTYpnAi/yQD4dATViIveK6Pn4t12mpPAlkMbbMTR8jtp5l1oHchcwe8QuEOKuTX5+STpNGlWs+tsMb12mhCpc3eO3RAoGAMxjDE2WOA8afkACuMBkFbzwUb+r4azNe7sf2aS3fRHaqMroabuYYoxdhHJItQ10pqN8U2P/bOO+4uCqWgo5o9BmMQr7MSjEh1TVsW6V8/9GFhyjcl3XoA4Ad/SU0QTEhEofomrdqwMSJMRVFDZzu8Gov6FlFx3sNbFW7Q8rHWgECgYEAq/TVz3iIgsLdvCXmosHSM9zvCpcr3FlqhmFOpseVmaamVWxajnIlY6xSuRBpg5nTUWwas4Nq/1BYtyiXE+K6lFuJtOq6Mc145EoANkIAYkHGR0Y36m1QtGaPVQzImZHV7NJAHCR9Ov90+jIk4BErca1+FKB3IWhPzLYb6ABJEyECgYEAthhzWSxPkqyiLl+2vnhdR3EEkvDX6MV6hGu4tDAf2A1Y0GSApyEaSAA31hlxu5EgneLD7Ns2HMpIfQMydB5lcwKQc9g/tVI1eRzuk6Myi+2JmPEM2BLyiX8yI+xnZlKDiZleQitCS4RQGz5HbXT70aYQIGxuvkQ/uf68jdrL6o8="
+ },
+ "destinations": [
+ "/retrieve/ucar"
+ ]
+ }
+}
diff --git a/client/catalog/config.json b/client/catalog/config.json
new file mode 100644
index 0000000..65f26ab
--- /dev/null
+++ b/client/catalog/config.json
@@ -0,0 +1,19 @@
+{
+ "global": {
+ "catalogPrefix": "/catalog",
+ "faceConfig": {
+ "host": "atmos-den.es.net",
+ "port": 80
+ }
+ },
+ "retrieval": {
+ "demoKey": {
+ "pub": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuAmnWYKE7E8G+hyy4TiTU7t91KyIGvglEeT6HWEkW4LKzXLO22a1jVS9+yP96I6vp7N5vpS1t7oXtgWuzkO+O85u6gfbvwp+67zJe2I89eHO4dmNnP4fx/j7WcCUCyzZfbyW67h5IoouoBIdQge2Xdvh9rFdex9UUhyjEZv5676zlcqlhz8xGBrJmQHsqpD9ijY1XhKBvoSIoQ0ZKkpmwVk8QYM9PbjUqzSQBj4aYXS+BPV6aRudVvyDt2DBXp2FNP0CGrosCXKnSl4Yv8BYp0k0RmFZDuJuntLb/XIvPEfMX5li7g3zHzAlIJIVSwT+FRkd3H5cECFSIZFUYIuSQQIDAQAB",
+ "priv": "MIIEpQIBAAKCAQEAuAmnWYKE7E8G+hyy4TiTU7t91KyIGvglEeT6HWEkW4LKzXLO22a1jVS9+yP96I6vp7N5vpS1t7oXtgWuzkO+O85u6gfbvwp+67zJe2I89eHO4dmNnP4fx/j7WcCUCyzZfbyW67h5IoouoBIdQge2Xdvh9rFdex9UUhyjEZv5676zlcqlhz8xGBrJmQHsqpD9ijY1XhKBvoSIoQ0ZKkpmwVk8QYM9PbjUqzSQBj4aYXS+BPV6aRudVvyDt2DBXp2FNP0CGrosCXKnSl4Yv8BYp0k0RmFZDuJuntLb/XIvPEfMX5li7g3zHzAlIJIVSwT+FRkd3H5cECFSIZFUYIuSQQIDAQABAoIBAQCKBftzfxavn6lM5T8m+GZN0vzRBsBg8Z/jpsYKSLOayiHNKYCIPaSFpXuCIYEo6/JDJLB2xVLvwupLgkGSwm2mrvCyJkihI38Cz6iQF6I+iia9bYrupgwxzsK7klm1c+J9kXXivYxj4hyLwmoc/mnARMtYV7cTQvDbUEzgRQmPykWKBv6Y0SL1WprfiRfKIMwSqQk91ffj6whKxBLAuUdseVBmo/ivLPq0a+wDrcvaJAxSB4eIwCHzAugkRA/NoK0vG3mra0lK5jvQrcNIuffxNAnresDVDTnYRc42etjePLAhlpeK/4sjYE/wPdeP8yzLHUg/hsSpAPIjLXJNZqUBAoGBANxPmUQNf1lGHo/nLY3dVMD3+kYNnTUD8XwS81qdg8/dNyF8t+7DOdJ1j7Itb+zGA1XXAGfTm6JoUG+eKKR2OSuyZcxygpOgzxAFanXKhTWZsKbG70xNmX0sOAEhtTGsgFTEGEv977MwIlFa6n2bsp3Luj/AGmvNsOYvBDPXOklxAoGBANXZyXAaE7M5JALusLuEFxLGvWVz6TRdQ//c+FWvKrnh+nFlTlAPpDvlaPJJca8ViNevxJ2UhGtbENXAqgwTYpnAi/yQD4dATViIveK6Pn4t12mpPAlkMbbMTR8jtp5l1oHchcwe8QuEOKuTX5+STpNGlWs+tsMb12mhCpc3eO3RAoGAMxjDE2WOA8afkACuMBkFbzwUb+r4azNe7sf2aS3fRHaqMroabuYYoxdhHJItQ10pqN8U2P/bOO+4uCqWgo5o9BmMQr7MSjEh1TVsW6V8/9GFhyjcl3XoA4Ad/SU0QTEhEofomrdqwMSJMRVFDZzu8Gov6FlFx3sNbFW7Q8rHWgECgYEAq/TVz3iIgsLdvCXmosHSM9zvCpcr3FlqhmFOpseVmaamVWxajnIlY6xSuRBpg5nTUWwas4Nq/1BYtyiXE+K6lFuJtOq6Mc145EoANkIAYkHGR0Y36m1QtGaPVQzImZHV7NJAHCR9Ov90+jIk4BErca1+FKB3IWhPzLYb6ABJEyECgYEAthhzWSxPkqyiLl+2vnhdR3EEkvDX6MV6hGu4tDAf2A1Y0GSApyEaSAA31hlxu5EgneLD7Ns2HMpIfQMydB5lcwKQc9g/tVI1eRzuk6Myi+2JmPEM2BLyiX8yI+xnZlKDiZleQitCS4RQGz5HbXT70aYQIGxuvkQ/uf68jdrL6o8="
+ },
+ "destinations": [
+ "/retrieve/den", "/retrieve/lbl", "/retrieve/csu"
+ ]
+ }
+}
+
diff --git a/client/catalog/css/cubeLoader.css b/client/catalog/css/cubeLoader.css
new file mode 100644
index 0000000..008b846
--- /dev/null
+++ b/client/catalog/css/cubeLoader.css
@@ -0,0 +1,61 @@
+.sk-cube-grid {
+ width: 40px;
+ height: 40px;
+ margin: 100px auto;
+}
+
+.sk-cube-grid .sk-cube {
+ width: 33%;
+ height: 33%;
+ background-color: #333;
+ float: left;
+ -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
+ animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
+}
+.sk-cube-grid .sk-cube1 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+.sk-cube-grid .sk-cube2 {
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s; }
+.sk-cube-grid .sk-cube3 {
+ -webkit-animation-delay: 0.4s;
+ animation-delay: 0.4s; }
+.sk-cube-grid .sk-cube4 {
+ -webkit-animation-delay: 0.1s;
+ animation-delay: 0.1s; }
+.sk-cube-grid .sk-cube5 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+.sk-cube-grid .sk-cube6 {
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s; }
+.sk-cube-grid .sk-cube7 {
+ -webkit-animation-delay: 0s;
+ animation-delay: 0s; }
+.sk-cube-grid .sk-cube8 {
+ -webkit-animation-delay: 0.1s;
+ animation-delay: 0.1s; }
+.sk-cube-grid .sk-cube9 {
+ -webkit-animation-delay: 0.2s;
+ animation-delay: 0.2s; }
+
+@-webkit-keyframes sk-cubeGridScaleDelay {
+ 0%, 70%, 100% {
+ -webkit-transform: scale3D(1, 1, 1);
+ transform: scale3D(1, 1, 1);
+ } 35% {
+ -webkit-transform: scale3D(0, 0, 1);
+ transform: scale3D(0, 0, 1);
+ }
+}
+
+@keyframes sk-cubeGridScaleDelay {
+ 0%, 70%, 100% {
+ -webkit-transform: scale3D(1, 1, 1);
+ transform: scale3D(1, 1, 1);
+ } 35% {
+ -webkit-transform: scale3D(0, 0, 1);
+ transform: scale3D(0, 0, 1);
+ }
+}
diff --git a/client/catalog/css/style.css b/client/catalog/css/style.css
new file mode 100644
index 0000000..0146b6e
--- /dev/null
+++ b/client/catalog/css/style.css
@@ -0,0 +1,269 @@
+html, body {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ min-width: 650px;
+ /* background-image: url(../background.jpg); */
+ background-size: cover;
+ background-attachment: fixed;
+}
+
+body#body {}
+
+.sidebar {
+ height: 100%;
+ max-height: 100%;
+ overflow: auto;
+}
+
+.fail {
+ color: red;
+}
+
+.sucess {
+ color: green;
+}
+
+.subnav {
+ display: none;
+ max-height: 500px;
+ overflow: auto;
+ margin-left: 15px;
+ border-left: gray 3px solid;
+}
+
+.autoComplete .list-group {
+ margin-bottom: 0;
+ border: none;
+}
+
+#searchBar {
+ display: inline-block;
+}
+
+#filters {
+ margin-bottom: 10px;
+ visibility: visible;
+ opacity: 1;
+ transition: visibility 1s ease-out, opacity 1s ease-out, margin-bottom 1s ease-out;
+}
+
+#filters .label {
+ /* display: none; */
+ font-size: inherit;
+ transition: background-color 1s, border-color 2s;
+ cursor: pointer;
+}
+
+#filters .label::after {
+ content: " \2716";
+}
+
+#filters .label:hover {
+ /* font-size: 0; */
+ background-color: red;
+ border-color: red;
+}
+
+#filters .label:hover::before {
+ content: "Remove ";
+}
+
+#filters .label:hover::after {
+ content: "?";
+}
+
+#filters .label:not(:last-child) {
+ margin-right: 5px;
+}
+
+#filters:empty {
+ visibility: hidden;
+ opacity: 0;
+ margin-bottom: 0;
+}
+
+/* Magic filters text that won't get picked up in jquery.text */
+#filters:not(:empty)::before {
+ content: "Filters: ";
+}
+
+#search {
+ min-width: 500px;
+}
+
+.autoComplete {
+ max-height: 0;
+ overflow-y: auto;
+ position: absolute;
+ left: 0;
+ transition: max-height 1s;
+ z-index: 1;
+ top: 40px !important; /* Ignore the library style */
+}
+
+*:focus ~ .autoComplete { /* If the parent detects focus on any subelement or itself */
+ max-height: 500px;
+}
+
+.interest-button {
+ font-size: medium;
+}
+
+.interest-button.disabled {
+ cursor: not-allowed !important;
+ color: gray;
+}
+
+.hidden {
+ height: 0;
+ display: none;
+}
+
+.disabled {
+ cursor: not-allowed;
+}
+
+.panel-heading a[data-toggle="collapse"]::after {
+ font-family: "Glyphicons Halflings";
+ content: "\e114";
+ float: right;
+ color: white;
+}
+
+.panel-heading a[data-toggle="collapse"].collapsed::after {
+ content: "\e080";
+}
+
+.treeExplorer .treeExplorerNode {
+ padding-left: 25px;
+ display: block;
+ cursor: pointer;
+}
+
+.treeExplorer .treeExplorerNode .nodeContent {
+ display: inline-block;
+}
+
+.treeExplorer .treeExplorerNode > .nodeChildren {
+ display: none;
+}
+
+.treeExplorer .treeExplorerNode.open > .nodeChildren {
+ display: block;
+}
+
+.treeExplorer .treeExplorerExpander:before {
+ content: "[+]";
+ color: gray;
+}
+
+.treeExplorer .open > .nodeContent > .treeExplorerExpander:before {
+ content: "[-]";
+}
+
+.treeExplorer .file > .nodeContent > .treeExplorerExpander {
+ cursor: default;
+}
+
+.treeExplorer .file > .nodeContent > .treeExplorerExpander:before {
+ content: "[=]"
+}
+
+#popup {
+ top: 0;
+ left: 0;
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 9000;
+ pointer-events: none;
+}
+
+#popup > * {
+ display: none;
+ pointer-events: auto;
+}
+
+.modal-open, #request {
+ padding-right: 0 !important;
+}
+
+.sk-cube-grid {
+ display: none;
+}
+
+table:empty ~ .sk-cube-grid {
+ display: block;
+}
+
+#requestForm {
+ max-width: 500px;
+ /* min-height: 300px; */
+ position: relative;
+}
+
+.floatRight {
+ float: right;
+ margin-right: 15px;
+}
+
+.fade {
+ display: none;
+}
+
+.fade.in {
+ display: block;
+}
+
+.navbar-brand {
+ text-shadow: 1px 1px 1px black;
+}
+
+.popover {
+ max-width: none;
+}
+
+.popover-container {
+ position: relative;
+}
+
+.metaData {
+ width: 600px;
+ max-height: 800px;
+ word-wrap: normal;
+ overflow: auto;
+}
+
+#requestForm button {
+ margin-bottom: 5px;
+}
+
+#templates {
+ display: none;
+}
+
+#subsetVariables > .row:not(:last-child) {
+ margin-bottom: 5px;
+}
+
+#subsetVariables {
+ transition: opacity 1s, margin 1s, padding 1s;
+}
+
+#subsetVariables:empty {
+ opacity: 0;
+ margin: 0;
+ padding: 0;
+}
+
+#direct-download-list:before {
+ content: "The following are available for direct download:";
+}
+
+#direct-download-list:empty:before {
+ content: "No names in the selection are available for direct download...";
+}
diff --git a/client/catalog/css/theme.min.css b/client/catalog/css/theme.min.css
new file mode 100644
index 0000000..3d05e87
--- /dev/null
+++ b/client/catalog/css/theme.min.css
@@ -0,0 +1,1438 @@
+/*! Generated by Live LESS Theme Customizer */
+.label,sub,sup{vertical-align:baseline}
+body,figure{margin:0}
+.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:10px;-webkit-tap-highlight-color:transparent}
+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}
+b,optgroup,strong{font-weight:700}
+dfn{font-style:italic}
+h1{margin:.67em 0}
+mark{background:#ff0;color:#000}
+sub,sup{font-size:75%;line-height:0;position:relative}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0;vertical-align:middle}
+svg:not(:root){overflow:hidden}
+hr{box-sizing:content-box;height:0}
+pre,textarea{overflow:auto}
+code,kbd,pre,samp{font-size:1em}
+button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}
+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{border:0;padding:0}
+input[type=checkbox],input[type=radio]{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-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+table{border-collapse:collapse;border-spacing:0}
+td,th{padding:0}
+@media print{blockquote,img,pre,tr{page-break-inside:avoid}
+*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-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}
+thead{display:table-header-group}
+img{max-width:100%!important}
+h2,h3,p{orphans:3;widows:3}
+h2,h3{page-break-after:avoid}
+.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}
+}
+.img-thumbnail,body{background-color:#fff}
+.btn,.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-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}
+@font-face{font-family:'Glyphicons Halflings';src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.eot);src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.woff) format('woff'),url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/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:"\002a"}
+.glyphicon-plus:before{content:"\002b"}
+.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,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}
+.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}
+.glyphicon-rub:before,.glyphicon-ruble: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"}
+*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
+body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;line-height:1.42857143;color:#333}
+button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}
+a{color:#2fa4e7;text-decoration:none}
+a:focus,a:hover{color:#157ab5;text-decoration:underline}
+a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}
+.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{padding:4px;line-height:1.42857143;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;display:inline-block;max-width:100%;height:auto}
+.img-circle{border-radius:50%}
+hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #eee}
+.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;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:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:#317eac}
+.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:22px;margin-bottom:11px}
+.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:11px;margin-bottom:11px}
+.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:41px}
+.h2,h2{font-size:34px}
+.h3,h3{font-size:28px}
+.h4,h4{font-size:20px}
+.h5,h5{font-size:16px}
+.h6,h6{font-size:14px}
+p{margin:0 0 11px}
+.lead{margin-bottom:22px;font-size:18px;font-weight:300;line-height:1.4}
+address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}
+dt,kbd kbd,label{font-weight:700}
+@media (min-width:768px){.lead{font-size:24px}
+}
+.small,small{font-size:87%}
+.mark,mark{background-color:#fcf8e3;padding:.2em}
+.list-inline,.list-unstyled{list-style:none;padding-left:0}
+.text-left{text-align:left}
+.text-right{text-align:right}
+.btn,.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:#2fa4e7}
+a.text-primary:focus,a.text-primary:hover{color:#178acc}
+.text-success{color:#468847}
+a.text-success:focus,a.text-success:hover{color:#356635}
+.text-info{color:#3a87ad}
+a.text-info:focus,a.text-info:hover{color:#2d6987}
+.text-warning{color:#c09853}
+a.text-warning:focus,a.text-warning:hover{color:#a47e3c}
+.text-danger{color:#b94a48}
+a.text-danger:focus,a.text-danger:hover{color:#953b39}
+.bg-primary{color:#fff;background-color:#2fa4e7}
+a.bg-primary:focus,a.bg-primary:hover{background-color:#178acc}
+.bg-success{background-color:#dff0d8}
+a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}
+.bg-info{background-color:#d9edf7}
+a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}
+.bg-warning{background-color:#fcf8e3}
+a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}
+.bg-danger{background-color:#f2dede}
+a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}
+pre code,table{background-color:transparent}
+.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eee}
+dl,ol,ul{margin-top:0}
+ol,ul{margin-bottom:11px}
+ol ol,ol ul,ul ol,ul ul{margin-bottom:0}
+.list-inline{margin-left:-5px}
+.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}
+dl{margin-bottom:22px}
+dd{margin-left:0}
+@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;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:11px 22px;margin:0 0 22px;font-size:20px;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%;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;border-right:5px solid #eee;border-left:0;text-align:right}
+caption,th{text-align:left}
+code,kbd{padding:2px 4px;font-size:90%}
+.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:22px;font-style:normal}
+code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}
+code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}
+kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}
+kbd kbd{padding:0;font-size:100%;box-shadow:none}
+pre{display:block;padding:10.5px;margin:0 0 11px;font-size:15px;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}
+.container,.container-fluid{margin-right:auto;margin-left:auto}
+pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}
+.container,.container-fluid{padding-left:15px;padding-right:15px}
+.pre-scrollable{overflow-y:scroll}
+@media (min-width:768px){.container{width:750px}
+}
+@media (min-width:992px){.container{width:970px}
+}
+@media (min-width:1200px){.container{width:1170px}
+}
+.row{margin-left:-15px;margin-right:-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-left:15px;padding-right: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}
+}
+caption{padding-top:8px;padding-bottom:8px;color:#777}
+.table{width:100%;max-width:100%;margin-bottom:22px}
+.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,.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,.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 col[class*=col-]{position:static;float:none;display:table-column}
+table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}
+.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left}
+.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{overflow-x:auto;min-height:.01%}
+@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;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,legend{padding:0;border:0}
+fieldset{margin:0;min-width:0}
+legend{display:block;width:100%;margin-bottom:22px;font-size:24px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}
+label{display:inline-block;max-width:100%;margin-bottom:5px}
+input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}
+input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}
+.form-control,output{display:block;font-size:16px;line-height:1.42857143;color:#555}
+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:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}
+output{padding-top:9px}
+.form-control{width:100%;height:40px;padding:8px 12px;background-color:#fff;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,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}
+.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}
+.form-control::-moz-placeholder{color:#777;opacity:1}
+.form-control:-ms-input-placeholder{color:#777}
+.form-control::-webkit-input-placeholder{color:#777}
+.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.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:#468847}
+.form-control::-ms-expand{border:0;background-color:transparent}
+.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}
+@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:40px}
+.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:33px}
+.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:57px}
+}
+.form-group{margin-bottom:15px}
+.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}
+.checkbox label,.radio label{min-height:22px;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-left:-20px;margin-top:4px\9}
+.checkbox+.checkbox,.radio+.radio{margin-top:-5px}
+.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}
+.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}
+.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,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}
+.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0;min-height:38px}
+.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}
+.form-group-sm .form-control,.input-sm{font-size:14px;padding:5px 10px;border-radius:3px}
+.input-sm{height:33px;line-height:1.5}
+select.input-sm{height:33px;line-height:33px}
+select[multiple].input-sm,textarea.input-sm{height:auto}
+.form-group-sm .form-control{height:33px;line-height:1.5}
+.form-group-sm select.form-control{height:33px;line-height:33px}
+.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}
+.form-group-sm .form-control-static{height:33px;min-height:36px;padding:6px 10px;font-size:14px;line-height:1.5}
+.form-group-lg .form-control,.input-lg{font-size:20px;padding:14px 16px;border-radius:6px}
+.input-lg{height:57px;line-height:1.3333333}
+select.input-lg{height:57px;line-height:57px}
+select[multiple].input-lg,textarea.input-lg{height:auto}
+.form-group-lg .form-control{height:57px;line-height:1.3333333}
+.form-group-lg select.form-control{height:57px;line-height:57px}
+.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}
+.form-group-lg .form-control-static{height:57px;min-height:42px;padding:15px 16px;font-size:20px;line-height:1.3333333}
+.has-feedback{position:relative}
+.has-feedback .form-control{padding-right:50px}
+.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:40px;height:40px;line-height:40px;text-align:center;pointer-events:none}
+.collapsing,.dropdown,.dropup{position:relative}
+.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:57px;height:57px;line-height:57px}
+.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:33px;height:33px;line-height:33px}
+.has-success .form-control{border-color:#468847;-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:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}
+.has-success .input-group-addon{color:#468847;border-color:#468847;background-color:#dff0d8}
+.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.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:#c09853}
+.has-warning .form-control{border-color:#c09853;-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:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}
+.has-warning .input-group-addon{color:#c09853;border-color:#c09853;background-color:#fcf8e3}
+.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.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:#b94a48}
+.has-error .form-control{border-color:#b94a48;-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:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}
+.has-error .input-group-addon{color:#b94a48;border-color:#b94a48;background-color:#f2dede}
+.has-feedback label~.form-control-feedback{top:27px}
+.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-control-static,.form-inline .form-group{display:inline-block}
+.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}
+.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}
+.form-inline .input-group{display:inline-table;vertical-align:middle}
+.form-inline .input-group .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 .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{margin-top:0;margin-bottom:0;padding-top:9px}
+.form-horizontal .checkbox,.form-horizontal .radio{min-height:31px}
+.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}
+.form-horizontal .has-feedback .form-control-feedback{right:15px}
+@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}
+.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:20px}
+.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:14px}
+}
+.btn{display:inline-block;margin-bottom:0;font-weight:400;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:8px 12px;font-size:16px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}
+.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}
+.btn.active,.btn:active{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{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}
+a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}
+.btn-default{color:#333;background-color:#fff;border-color:rgba(0,0,0,.1)}
+.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:rgba(0,0,0,.1)}
+.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:rgba(0,0,0,.1)}
+.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:rgba(0,0,0,.1)}
+.btn-default .badge{color:#fff;background-color:#333}
+.btn-primary{color:#fff;background-color:#2fa4e7;border-color:#1a99e2}
+.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#178acc;border-color:#0d4c70}
+.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#178acc;border-color:#1474ac}
+.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#1474ac;border-color:#0d4c70}
+.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#2fa4e7;border-color:#1a99e2}
+.btn-primary .badge{color:#2fa4e7;background-color:#fff}
+.btn-success{color:#fff;background-color:#73a839;border-color:#669533}
+.btn-success.focus,.btn-success:focus{color:#fff;background-color:#59822c;border-color:#253612}
+.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#59822c;border-color:#476723}
+.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#476723;border-color:#253612}
+.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}
+.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#73a839;border-color:#669533}
+.btn-success .badge{color:#73a839;background-color:#fff}
+.btn-info{color:#fff;background-color:#033c73;border-color:#022f5a}
+.btn-info.focus,.btn-info:focus{color:#fff;background-color:#022241;border-color:#000}
+.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#022241;border-color:#01101f}
+.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#01101f;border-color:#000}
+.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#033c73;border-color:#022f5a}
+.btn-info .badge{color:#033c73;background-color:#fff}
+.btn-warning{color:#fff;background-color:#dd5600;border-color:#c44c00}
+.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#aa4200;border-color:#441a00}
+.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#aa4200;border-color:#863400}
+.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#863400;border-color:#441a00}
+.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#dd5600;border-color:#c44c00}
+.btn-warning .badge{color:#dd5600;background-color:#fff}
+.btn-danger{color:#fff;background-color:#c71c22;border-color:#b1191e}
+.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#9a161a;border-color:#41090b}
+.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#9a161a;border-color:#7b1115}
+.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#7b1115;border-color:#41090b}
+.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c71c22;border-color:#b1191e}
+.btn-danger .badge{color:#c71c22;background-color:#fff}
+.btn-link{color:#2fa4e7;font-weight:400;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:#157ab5;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:14px 16px;font-size:20px;line-height:1.3333333;border-radius:6px}
+.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}
+.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:14px;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{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}
+.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}
+.dropdown-toggle:focus{outline:0}
+.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:16px;text-align:left;background-color:#fff;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);background-clip:padding-box}
+.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}
+.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}
+.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}
+.dropdown-header,.dropdown-menu>li>a{white-space:nowrap;padding:3px 20px;line-height:1.42857143}
+.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}
+.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}
+.dropdown-menu>li>a{display:block;clear:both;font-weight:400;color:#333}
+.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#fff;background-color:#2fa4e7}
+.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#2fa4e7}
+.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;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}
+.open>.dropdown-menu{display:block}
+.open>a{outline:0}
+.dropdown-menu-left{left:0;right:auto}
+.dropdown-header{display:block;font-size:14px;color:#777}
+.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}
+.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}
+.pull-right>.dropdown-menu{right:0;left:auto}
+.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}
+.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}
+@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}
+.navbar-right .dropdown-menu-left{left:0;right:auto}
+}
+.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,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}
+.btn .caret,.btn-group>.btn:first-child{margin-left:0}
+.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}
+.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}
+.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-lg .caret{border-width:5px 5px 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%}
+.media-object.img-thumbnail,.nav>li>a>img{max-width:none}
+.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:first-child:not(:last-child){border-radius:4px 4px 0 0}
+.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 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-right-radius:0;border-top-left-radius:0}
+.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}
+.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;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-left:0;padding-right:0}
+.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}
+.input-group .form-control:focus{z-index:3}
+.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:57px;padding:14px 16px;font-size:20px;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:57px;line-height:57px}
+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:33px;padding:5px 10px;font-size:14px;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:33px;line-height:33px}
+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}
+.nav>li,.nav>li>a{position:relative;display:block}
+.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:8px 12px;font-size:16px;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:14px;border-radius:3px}
+.input-group-addon.input-lg{padding:14px 16px;font-size:20px;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-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-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{z-index:2;margin-left:-1px}
+.nav{margin-bottom:0;padding-left:0;list-style:none}
+.nav>li>a{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;background-color:transparent;cursor:not-allowed}
+.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#2fa4e7}
+.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}
+.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;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}
+.nav-tabs.nav-justified{width:100%;border-bottom:0}
+.nav-tabs.nav-justified>li{float:none}
+.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;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{display:table-cell;width:1%}
+.nav-tabs.nav-justified>li>a{margin-bottom:0;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-justified>li,.nav-stacked>li{float:none}
+.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:#2fa4e7}
+.nav-stacked>li+li{margin-top:2px;margin-left:0}
+.nav-justified{width:100%}
+.nav-justified>li>a{text-align:center;margin-bottom:5px}
+.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-justified>li{display:table-cell;width:1%}
+.nav-justified>li>a{margin-bottom:0}
+.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-right-radius:0;border-top-left-radius:0}
+.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}
+.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}
+.navbar-collapse.in{overflow-y:auto}
+@media (min-width:768px){.navbar{border-radius:4px}
+.navbar-header{float:left}
+.navbar-collapse{width:auto;border-top:0;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-left:0;padding-right:0}
+}
+.carousel-inner,.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}
+@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}
+.navbar-static-top{z-index:1000;border-width:0 0 1px}
+.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}
+.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;padding:14px 15px;font-size:20px;line-height:22px;height:50px}
+.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}
+.navbar-brand>img{display:block}
+@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-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}
+.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}
+}
+.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;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}
+.navbar-nav{margin:7px -15px}
+.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}
+@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;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:22px}
+.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}
+}
+.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.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)}
+@media (min-width:768px){.navbar-toggle{display:none}
+.navbar-nav{float:left;margin:0}
+.navbar-nav>li{float:left}
+.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}
+}
+.navbar-form{padding:10px 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);margin:5px -15px}
+@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}
+.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}
+.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}
+.navbar-form .input-group{display:inline-table;vertical-align:middle}
+.navbar-form .input-group .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 .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}
+}
+.btn .badge,.btn .label{position:relative;top:-1px}
+.breadcrumb>li,.pagination{display:inline-block}
+@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;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}
+}
+.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}
+.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}
+.navbar-btn{margin-top:5px;margin-bottom:5px}
+.navbar-btn.btn-sm{margin-top:8.5px;margin-bottom:8.5px}
+.navbar-btn.btn-xs,.navbar-text{margin-top:14px;margin-bottom:14px}
+@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}
+.navbar-left{float:left!important}
+.navbar-right{float:right!important;margin-right:-15px}
+.navbar-right~.navbar-right{margin-right:0}
+}
+.navbar-default{background-color:#2fa4e7;border-color:#1995dc}
+.navbar-default .navbar-brand{color:#fff}
+.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#fff;background-color:none}
+.navbar-default .navbar-text{color:#ddd}
+.navbar-default .navbar-nav>li>a{color:#fff}
+.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#fff;background-color:#178acc}
+.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#fff;background-color:#1995dc}
+.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ddd;background-color:transparent}
+.navbar-default .navbar-toggle{border-color:#178acc}
+.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#178acc}
+.navbar-default .navbar-toggle .icon-bar{background-color:#fff}
+.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#1995dc}
+.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#1995dc;color:#fff}
+@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}
+.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#178acc}
+.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:#fff;background-color:#1995dc}
+.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:#ddd;background-color:transparent}
+}
+.navbar-default .btn-link,.navbar-default .btn-link:focus,.navbar-default .btn-link:hover,.navbar-default .navbar-link,.navbar-default .navbar-link:hover{color:#fff}
+.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:#ddd}
+.navbar-inverse{background-color:#033c73;border-color:#022241}
+.navbar-inverse .navbar-brand{color:#fff}
+.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:none}
+.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#fff}
+.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#022f5a}
+.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#022241}
+.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}
+.navbar-inverse .navbar-toggle{border-color:#022f5a}
+.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#022f5a}
+.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}
+.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#022a50}
+.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#022241;color:#fff}
+@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#022241}
+.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#022241}
+.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}
+.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#022f5a}
+.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:#022241}
+.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:#ccc;background-color:transparent}
+}
+.navbar-inverse .btn-link,.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover,.navbar-inverse .navbar-link,.navbar-inverse .navbar-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:#ccc}
+.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}
+.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}
+.breadcrumb>.active{color:#777}
+.pagination{padding-left:0;margin:22px 0;border-radius:4px}
+.pager li,.pagination>li{display:inline}
+.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;line-height:1.42857143;text-decoration:none;color:#2fa4e7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}
+.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}
+.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}
+.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#157ab5;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:3;color:#777;background-color:#f5f5f5;border-color:#2fa4e7;cursor:default}
+.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}
+.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:20px;line-height:1.3333333}
+.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}
+.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}
+.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:14px;line-height:1.5}
+.badge,.label{text-align:center;font-weight:700;line-height:1;white-space:nowrap}
+.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}
+.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}
+.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}
+.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;background-color:#fff;cursor:not-allowed}
+.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}
+a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}
+.label:empty{display:none}
+.label-default{background-color:#777}
+.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}
+.label-primary{background-color:#2fa4e7}
+.label-primary[href]:focus,.label-primary[href]:hover{background-color:#178acc}
+.label-success{background-color:#73a839}
+.label-success[href]:focus,.label-success[href]:hover{background-color:#59822c}
+.label-info{background-color:#033c73}
+.label-info[href]:focus,.label-info[href]:hover{background-color:#022241}
+.label-warning{background-color:#dd5600}
+.label-warning[href]:focus,.label-warning[href]:hover{background-color:#aa4200}
+.label-danger{background-color:#c71c22}
+.label-danger[href]:focus,.label-danger[href]:hover{background-color:#9a161a}
+.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:14px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}
+.badge:empty{display:none}
+.media-object,.thumbnail{display:block}
+.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:#2fa4e7;background-color:#fff}
+.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}
+.list-group-item>.badge{float:right}
+.list-group-item>.badge+.badge{margin-right:5px}
+.nav-pills>li>a>.badge{margin-left:3px}
+.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}
+.jumbotron p{margin-bottom:15px;font-size:24px;font-weight:200}
+.alert .alert-link,.close{font-weight:700}
+.alert,.thumbnail{margin-bottom:22px}
+.jumbotron>hr{border-top-color:#d5d5d5}
+.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}
+.jumbotron .container{max-width:100%}
+@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}
+.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}
+.jumbotron .h1,.jumbotron h1{font-size:72px}
+}
+.thumbnail{padding:4px;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-left:auto;margin-right:auto}
+a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#2fa4e7}
+.thumbnail .caption{padding:9px;color:#333}
+.alert{padding:15px;border:1px solid transparent;border-radius:4px}
+.alert h4{margin-top:0;color:inherit}
+.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}
+.modal,.modal-backdrop{right:0;bottom:0;left:0}
+.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}
+.alert-success hr{border-top-color:#c9e2b3}
+.alert-success .alert-link{color:#356635}
+.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}
+.alert-info hr{border-top-color:#a6e1ec}
+.alert-info .alert-link{color:#2d6987}
+.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#c09853}
+.alert-warning hr{border-top-color:#f7e1b5}
+.alert-warning .alert-link{color:#a47e3c}
+.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#b94a48}
+.alert-danger hr{border-top-color:#e4b9c0}
+.alert-danger .alert-link{color:#953b39}
+@-webkit-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:22px;margin-bottom:22px;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:14px;line-height:22px;color:#fff;text-align:center;background-color:#2fa4e7;-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:-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);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:#73a839}
+.progress-striped .progress-bar-success{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:#033c73}
+.progress-striped .progress-bar-info{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:#dd5600}
+.progress-striped .progress-bar-warning{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:#c71c22}
+.progress-striped .progress-bar-danger{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{zoom:1;overflow:hidden}
+.media-body{width:10000px}
+.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{margin-bottom:20px;padding-left:0}
+.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-right-radius:4px;border-top-left-radius:4px}
+.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}
+a.list-group-item,button.list-group-item{color:#555}
+a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}
+a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}
+button.list-group-item{width:100%;text-align:left}
+.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}
+.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:#2fa4e7;border-color:#2fa4e7}
+.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:#e6f4fc}
+.list-group-item-success{color:#468847;background-color:#dff0d8}
+a.list-group-item-success,button.list-group-item-success{color:#468847}
+a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}
+a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#468847;background-color:#d0e9c6}
+a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#468847;border-color:#468847}
+.list-group-item-info{color:#3a87ad;background-color:#d9edf7}
+a.list-group-item-info,button.list-group-item-info{color:#3a87ad}
+a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}
+a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#3a87ad;background-color:#c4e3f3}
+a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#3a87ad;border-color:#3a87ad}
+.list-group-item-warning{color:#c09853;background-color:#fcf8e3}
+a.list-group-item-warning,button.list-group-item-warning{color:#c09853}
+a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}
+a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#c09853;background-color:#faf2cc}
+a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#c09853;border-color:#c09853}
+.list-group-item-danger{color:#b94a48;background-color:#f2dede}
+a.list-group-item-danger,button.list-group-item-danger{color:#b94a48}
+a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}
+a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#b94a48;background-color:#ebcccc}
+a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#b94a48;border-color:#b94a48}
+.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}
+.list-group-item-heading{margin-top:0;margin-bottom:5px}
+.list-group-item-text{margin-bottom:0;line-height:1.3}
+.panel{margin-bottom:22px;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-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}
+.panel-body{padding:15px}
+.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}
+.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.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-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>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,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}
+.panel-title{margin-top:0;font-size:18px}
+.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 .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}
+.panel>.table-responsive:last-child>.table:last-child,.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,.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>.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-right-radius:3px;border-top-left-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>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}
+.panel>.table-responsive:first-child>.table:first-child,.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,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}
+.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}
+.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}
+.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>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-responsive{border:0;margin-bottom:0}
+.panel-group{margin-bottom:22px}
+.panel-group .panel{margin-bottom:0;border-radius:4px}
+.panel-group .panel+.panel{margin-top:5px}
+.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:#2fa4e7}
+.panel-primary>.panel-heading{color:#fff;background-color:#2fa4e7;border-color:#2fa4e7}
+.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2fa4e7}
+.panel-primary>.panel-heading .badge{color:#2fa4e7;background-color:#fff}
+.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2fa4e7}
+.panel-success{border-color:#d6e9c6}
+.panel-success>.panel-heading{color:#468847;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:#468847}
+.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}
+.panel-info{border-color:#bce8f1}
+.panel-info>.panel-heading{color:#3a87ad;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:#3a87ad}
+.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}
+.panel-warning{border-color:#faebcc}
+.panel-warning>.panel-heading{color:#c09853;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:#c09853}
+.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}
+.panel-danger{border-color:#ebccd1}
+.panel-danger>.panel-heading{color:#b94a48;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:#b94a48}
+.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}
+.embed-responsive{position:relative;display:block;height:0;padding:0}
+.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width: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:24px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}
+.popover,.tooltip{text-decoration:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal}
+.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}
+button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}
+.modal-content,.popover{background-clip:padding-box}
+.modal{display:none;position:fixed;top:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}
+.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}
+.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;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}
+.modal-backdrop{position:fixed;top:0;z-index:1040;background-color:#000}
+.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}
+.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}
+.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}
+.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{top:0;border-width:0 5px 5px;border-bottom-color:#000}
+.modal-header .close{margin-top:-2px}
+.modal-title{margin:0;line-height:1.42857143}
+.modal-body{position:relative;padding:20px}
+.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}
+.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}
+.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}
+}
+.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}
+@media (min-width:992px){.modal-lg{width:900px}
+}
+.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:14px;opacity:0;filter:alpha(opacity=0)}
+.tooltip.in{opacity:.9;filter:alpha(opacity=90)}
+.tooltip.top{margin-top:-3px;padding:5px 0}
+.tooltip.right{margin-left:3px;padding:0 5px}
+.tooltip.bottom{margin-top:3px;padding:5px 0}
+.tooltip.left{margin-left:-3px;padding:0 5px}
+.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;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}
+.tooltip.top-right .tooltip-arrow{left:5px}
+.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{left:50%;margin-left:-5px}
+.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}
+.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}
+.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:16px;background-color:#fff;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)}
+.carousel-caption,.carousel-control{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6)}
+.popover.top{margin-top:-10px}
+.popover.right{margin-left:10px}
+.popover.bottom{margin-top:10px}
+.popover.left{margin-left:-10px}
+.popover-title{margin:0;padding:8px 14px;font-size:16px;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}
+.carousel,.carousel-inner{position:relative}
+.popover>.arrow{border-width:11px}
+.popover>.arrow:after{border-width:10px;content:""}
+.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}
+.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}
+.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}
+.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}
+.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}
+.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}
+.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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;border-right-width:0;border-left-color:#fff}
+.carousel-inner{width:100%}
+.carousel-inner>.item{display:none;position:relative;-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;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}
+.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}
+.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}
+.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left: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;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;text-align:center;background-color:transparent}
+.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:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}
+.carousel-control.right{left:auto;right:0;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:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}
+.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}
+.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;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;line-height:1;font-family:serif}
+.carousel-control .icon-prev:before{content:'\2039'}
+.carousel-control .icon-next:before{content:'\203a'}
+.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}
+.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:transparent}
+.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}
+.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;text-align:center}
+.carousel-caption .btn,.text-hide{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:-10px;font-size:30px}
+.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}
+.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}
+.carousel-caption{left:20%;right: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,.modal-header:after,.modal-header: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{content:" ";display:table}
+.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,.modal-header: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-left:auto;margin-right:auto}
+.pull-right{float:right!important}
+.pull-left{float:left!important}
+.hide{display:none!important}
+.show{display:block!important}
+.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}
+.invisible{visibility:hidden}
+.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}
+.affix{position:fixed}
+@-ms-viewport{width:device-width}
+@media (max-width:767px){.visible-xs{display:block!important}
+table.visible-xs{display:table!important}
+tr.visible-xs{display:table-row!important}
+td.visible-xs,th.visible-xs{display:table-cell!important}
+.visible-xs-block{display:block!important}
+.visible-xs-inline{display:inline!important}
+.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!important}
+tr.visible-sm{display:table-row!important}
+td.visible-sm,th.visible-sm{display:table-cell!important}
+.visible-sm-block{display:block!important}
+.visible-sm-inline{display:inline!important}
+.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!important}
+tr.visible-md{display:table-row!important}
+td.visible-md,th.visible-md{display:table-cell!important}
+.visible-md-block{display:block!important}
+.visible-md-inline{display:inline!important}
+.visible-md-inline-block{display:inline-block!important}
+}
+@media (min-width:1200px){.visible-lg{display:block!important}
+table.visible-lg{display:table!important}
+tr.visible-lg{display:table-row!important}
+td.visible-lg,th.visible-lg{display:table-cell!important}
+.visible-lg-block{display:block!important}
+.visible-lg-inline{display:inline!important}
+.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!important}
+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}
+.hidden-print{display:none!important}
+}
diff --git a/client/catalog/index.html b/client/catalog/index.html
new file mode 100644
index 0000000..78c0e73
--- /dev/null
+++ b/client/catalog/index.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html>
+<html lang="en-US">
+
+<head>
+<title>NDN Query and Retrieval Tool</title>
+
+<script>
+(function(i, s, o, g, r, a, m) {
+ i['GoogleAnalyticsObject'] = r;
+ i[r] = i[r] || function() {
+ (i[r].q = i[r].q || []).push(arguments)
+ }
+ ,
+ i[r].l = 1 * new Date();
+ a = s.createElement(o),
+ m = s.getElementsByTagName(o)[0];
+ a.async = 1;
+ a.src = g;
+ m.parentNode.insertBefore(a, m)
+})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
+ga('create', 'UA-64984905-1', 'auto');
+ga('send', 'pageview');
+</script>
+
+<!-- Styles -->
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
+<link rel="stylesheet" href="css/cubeLoader.css">
+<link rel="stylesheet" href="css/theme.min.css">
+<link rel="stylesheet" href="css/style.css">
+
+<!-- Scripts -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js">
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.2/jquery.scrollTo.min.js">
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js">
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/async/1.5.2/async.min.js">
+</script>
+<script src="../ndn-js/build/ndn.min.js">
+</script>
+<script src="js/autocomplete.js">
+</script>
+<script src="js/treeExplorer.js">
+</script>
+<script src="js/catalog.js">
+</script>
+
+</head>
+
+<body id="body">
+
+ <div id="templates">
+ <div class="row" id="timeTemplate">
+ <button class="col-xs-1 close" type="button">×</button>
+ <div class="col-xs-4">
+ <input type="text" class="form-control variable" value="time">
+ </div>
+ <div class="col-xs-7 values">
+ <input type="datetime" class="form-control" name="start" placeholder="Start">
+ <input type="datetime" class="form-control" name="end" placeholder="End">
+ </div>
+ </div>
+ <div class="row" id="locationTemplate">
+ <button class="col-xs-1 close" type="button">×</button>
+ <div class="col-xs-4">
+ <input type="text" class="form-control variable" value="coord">
+ </div>
+ <div class="col-xs-7 values">
+ <div class="input-group">
+ <input type="number" class="form-control" name="startLat" placeholder="Start Latitude">
+ <span class="input-group-addon">° North</span>
+ </div>
+ <div class="input-group">
+ <input type="number" class="form-control" name="startLong" placeholder="Start Longitude">
+ <span class="input-group-addon">° East</span>
+ </div>
+ <div class="input-group">
+ <input type="number" class="form-control" name="endLat" placeholder="End Latitude">
+ <span class="input-group-addon">° North</span>
+ </div>
+ <div class="input-group values">
+ <input type="number" class="form-control" name="endLong" placeholder="End Longitude">
+ <span class="input-group-addon">° East</span>
+ </div>
+ </div>
+ </div>
+ <div class="row" id="customTemplate">
+ <button class="col-xs-1 close" type="button">×</button>
+ <div class="col-xs-4">
+ <input type="text" class="form-control variable" placeholder="Variable Name">
+ </div>
+ <div class="col-xs-7 values">
+ <input type="text" class="form-control" name="value" placeholder="Custom Restriction">
+ </div>
+ </div>
+ </div>
+
+ <header>
+ <div class="navbar navbar-inverse navbar-static-top container-fluid">
+ <div class="navbar-header">
+ <a class="navbar-brand" data-toggle="tab" href="#filterSearch" id="brand-title">NDN Query and Retrieval Tool</a>
+ </div>
+ <ul class="navbar-nav nav">
+ <li class="active" id="search-tab"><a data-toggle="tab" href="#filterSearch">Filter Search</a></li>
+ <li id="path-search-tab"><a data-toggle="tab" href="#path-search">Path Search</a></li>
+ <li id="tree-search-tab"><a data-toggle="tab" href="#tree-search">Tree Search</a></li>
+ </ul>
+ </div>
+ </header>
+
+ <div class="container-fluid">
+
+ <div class="row">
+
+ <div class="col-sm-12 col-md-12">
+
+ <div id="alerts"></div>
+
+ <div class="panel panel-info tab-pane fade in active" id="filterSearch">
+ <div class="panel-heading">Filter Search</div>
+ <div class="panel-body">
+ <div>
+ <div id="filters"></div>
+ <button id="searchButton" class="btn btn-primary right-fix">Search</button>
+ </div>
+ <div>
+ <div class="panel panel-primary">
+ <div class="panel-heading">
+ <span>Filter Categories</span>
+ </div>
+ <div class="panel-body">
+ <ul id="side-menu" class="nav nav-pills nav-stacked"></ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="tab-pane fade" id="path-search">
+ <div class="panel panel-info" id="pathSearch">
+ <div class="panel-heading">Path Search</div>
+ <div class="panel-body">
+ <form class="form-inline" id="searchBar">
+ <div class="form-group">
+ <div class="input-group">
+ <input id="search" placeholder="Enter a path (Ex: /CMIP5)" type="text" class="form-control">
+ <div class="input-group-btn">
+ <button id="autoCompleteSearch" type="submit" class="btn btn-primary">Search</button>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+ <div class="tab-pane fade" id="tree-search">
+ <div class="panel panel-info" id="treeSearchPane">
+ <div class="panel-heading">Tree Search</div>
+ <div class="panel-body" id="treeSearch">
+ <div></div>
+ </div>
+ </div>
+ </div>
+
+ <div id="results" class="panel panel-default hidden">
+ <div class="panel-body">
+ <nav class="navbar navbar-inverse col-md-12 resultMenu">
+ <ul class="nav navbar-nav navbar-left">
+ <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
+ <li><a href="#" class="clearResults">Clear</a></li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Results Per Page <span class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li class="active"><a href="#" class="resultsPerPageSelector">25</a></li>
+ <li><a href="#" class="resultsPerPageSelector">50</a></li>
+ <li><a href="#" class="resultsPerPageSelector">100</a></li>
+ <li><a href="#" class="resultsPerPageSelector">200</a></li>
+ </ul>
+ </li>
+ <li class="previous disabled">
+ <a href="#">← Previous</a>
+ </li>
+ <li class="next disabled">
+ <a href="#">Next →</a>
+ </li>
+ </ul>
+ <div class="navbar-text navbar-right">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
+ </nav>
+ <table id="resultTable" class="table"></table>
+ <div class="sk-cube-grid">
+ <div class="sk-cube sk-cube1"></div>
+ <div class="sk-cube sk-cube2"></div>
+ <div class="sk-cube sk-cube3"></div>
+ <div class="sk-cube sk-cube4"></div>
+ <div class="sk-cube sk-cube5"></div>
+ <div class="sk-cube sk-cube6"></div>
+ <div class="sk-cube sk-cube7"></div>
+ <div class="sk-cube sk-cube8"></div>
+ <div class="sk-cube sk-cube9"></div>
+ </div>
+ <nav class="navbar navbar-inverse col-md-12 resultMenu">
+ <ul class="nav navbar-nav navbar-left">
+ <li><a href="#" class="requestSelectedButton">Request Selected</a></li>
+ <li><a href="#" class="clearResults">Clear</a></li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Results Per Page <span class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li class="active"><a href="#" class="resultsPerPageSelector">25</a></li>
+ <li><a href="#" class="resultsPerPageSelector">50</a></li>
+ <li><a href="#" class="resultsPerPageSelector">100</a></li>
+ <li><a href="#" class="resultsPerPageSelector">200</a></li>
+ </ul>
+ </li>
+ <li class="previous disabled">
+ <a href="#">← Previous</a>
+ </li>
+ <li class="next disabled">
+ <a href="#">Next →</a>
+ </li>
+ </ul>
+ <div class="navbar-text navbar-right">(Page <span class="pageNumber">0</span>) <span class="pageLength">0</span>/<span class="totalResults">0</span> Results</div>
+ </nav>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="popup">
+ <div id="request" class="panel panel-primary">
+ <div class="panel-heading">Confirmation</div>
+ <div class="panel-body">
+ <form id="requestForm">
+ <p>Select a destination and press submit if you are sure you want to download the selected data to the selected destination.</p>
+ <div class="dropdown">
+ <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
+ <span id="requestDropText">Destination<span>
+ <span class="caret"></span>
+ </button>
+ <ul id="requestDest" class="dropdown-menu"></ul>
+ </div>
+ <div class="panel panel-default" id="subsetting">
+ <div class="panel-heading">
+ <a data-toggle="collapse" href="#subsetMenu">Subsetting</a>
+ </div>
+ <div class="panel-collapse collapse" id="subsetMenu">
+ <div class="panel-body">
+ <div id="subsetVariables" class="well"></div>
+ <button type="button" class="btn btn-default" id="subsetAddVariableBtn">Add Variable</button>
+ <button type="button" class="btn btn-default" id="subsetAddTimeVariable">Add Time Variable</button>
+ <button type="button" class="btn btn-default" id="subsetAddLocVariable">Add Location Variable</button>
+ </div>
+ </div>
+ </div>
+ <!-- Disabled For Demo
+ <div class="form-group">
+ <label>Authentication Key</label>
+ <input type="file" class="form-control" placeholder="JSON encoded RSA key">
+ <p class="help-block">It is required that you have authentication to move the files, otherwise this will fail.</p>
+ </div>
+ <div id="requestDrop" class="well">You can also drop your key here instead of using the input above.</div>
+ -->
+ <div class="row">
+ <div class="floatRight">
+ <button type="submit" class="btn btn-primary">Submit</button>
+ <button id="requestCancel" type="button" class="btn btn-default">Cancel</button>
+ </div>
+ </div>
+ </form>
+ <div>
+ <div class="list-group" id="direct-download-list"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+</body>
+
+</html>
diff --git a/client/catalog/js/autocomplete.js b/client/catalog/js/autocomplete.js
new file mode 100644
index 0000000..677e486
--- /dev/null
+++ b/client/catalog/js/autocomplete.js
@@ -0,0 +1,180 @@
+/*
+ * The following code is a jquery extention written to add autocomplete functionality to bootstrap input groups.
+ *
+ * Usage:
+ *
+ * Then simply call $('.someClass').autoComplete(getSuggestions) on it to enable auto completion.
+ *
+ * getSuggestions returns by calling its callback parameter with an array of valid strings.
+ *
+ * Autocomplete can be manually triggered by triggering the autoComplete event.
+ *
+ */
+(function(){
+ "use strict";
+ if (!jQuery){
+ throw new Error("jQuery is required and must be loaded before this script.")
+ }
+ jQuery.fn.extend({
+ /**
+ * This setups up the default autocomplete functionality on an object.
+ * Using either a list of options or supplying a function that returns them,
+ * auto complete will create a menu for users to navigate and select a
+ * valid option.
+ * @param {Array<String>|function(String, function(Array<String>))} suggestions
+ */
+ autoComplete: function(suggestions) {
+
+ var element = $('<div></div>');
+ element.addClass('list-group')
+ .addClass('autoComplete')
+ .css({
+ 'top': this.parent().height()
+ });
+
+ this.attr('autocomplete', 'off')
+ .after(element);
+
+ var getSuggestions = function(current, callback){
+ callback(suggestions.reduce(function(prev, suggestion){
+ if (current.toLowerCase().indexOf(suggestion.substr(0, current.length).toLowerCase()) === 0){
+ prev.push(suggestion);
+ }
+ return prev;
+ }, []));
+ }
+
+ var lastList = [];
+
+ var setAutoComplete = function(list){
+ lastList = list;
+ element.empty();
+
+ element.html(list.reduce(function(prev, current){
+ return [prev, '<a href="#" class="list-group-item">', current, '</a>'].join("");
+ }, ""));
+
+ }
+
+ if (suggestions instanceof Function){
+ getSuggestions = suggestions;
+ }
+
+ var input = this;
+
+ var matcher = /^\/([-_\w]+\/)*/; //Returns only the absolute path.
+
+ var getValue = function(){
+ var res = matcher.exec(input.val());
+ if (res){
+ return res[0]; //Return the absolute match
+ } else {
+ throw new Error("Empty or incorrectly formatted path.");
+ }
+ }
+
+ element.bind('click', 'a', function(){
+ input.val($(event.target).text());
+ getSuggestions(getValue(), setAutoComplete);
+ input.focus();
+ });
+
+ var updateFromList = function(){
+ var val = input.val(); //Needs to be unfiltered, for filtering existing results.
+ var temp = lastList;
+ setAutoComplete(lastList.reduce(function(prev, current){
+ if (current.indexOf(val) === 0){
+ prev.push(current);
+ }
+ return prev;
+ }, []));
+ lastList = temp;
+ }
+
+ this.keydown(function(e){
+ switch(e.which){
+ case 38: //up
+ var active = element.find('.active');
+ if (active.length === 0){
+ element.find(':first-child').addClass('active');
+ } else {
+ if (!active.is(':first-child')){
+ var top = active.removeClass('active').prev().addClass('active').offset().top;
+ active.parent().stop().animate({scrollTop: top}, 500);
+ }
+ }
+ e.preventDefault();
+ break;
+
+ case 40: //down
+ var active = element.find('.active');
+ if (active.length === 0){
+ element.find(':first-child').addClass('active');
+ } else {
+ if (!active.is(':last-child')){
+ var top = active.removeClass('active').next().addClass('active').offset().top;
+ active.parent().stop().animate({scrollTop: top}, 500);
+ }
+ }
+ e.preventDefault();
+ break;
+
+ case 13: //Enter
+ var active = element.find('.active');
+ if (active.length === 1){
+ $(this).val(active.text());
+ e.preventDefault();
+ getSuggestions(getValue(), setAutoComplete);
+ }
+ break;
+
+ case 9: //Tab
+ getSuggestions(getValue(), setAutoComplete);
+ e.preventDefault(); //Don't print tab or select a different element.
+ break;
+
+ case 8:
+ console.log("Detected backspace");
+ if (input.val().slice(-1) == "/"){
+ e.preventDefault();
+ input.val(input.val().slice(0,-1)); //Manually backspace early. (Have to do it manually)
+ getSuggestions(getValue(), setAutoComplete);
+ } else {
+ updateFromList(setAutoComplete);
+ }
+
+ default:
+ updateFromList();
+
+ }
+
+ })
+ .keyup(function(e){
+ switch (e.which){
+
+ case 191:
+ getSuggestions(getValue(), setAutoComplete);
+
+ break;
+ case 38:
+ case 40:
+ case 13:
+ case 9:
+ // Do nothing
+
+ break;
+ default:
+ updateFromList();
+ }
+ });
+
+ this.on('autoComplete', function(){
+ getSuggestions(getValue(), setAutoComplete);
+ });
+
+ return this;
+
+ }
+ });
+})();
+
diff --git a/client/catalog/js/catalog.js b/client/catalog/js/catalog.js
new file mode 100644
index 0000000..880ea4e
--- /dev/null
+++ b/client/catalog/js/catalog.js
@@ -0,0 +1,828 @@
+//Run when the document loads AND we have the config loaded.
+(function() {
+ "use strict";
+ var config;
+ var conversions;
+
+ Promise.all([new Promise(function(resolve, reject) {
+ $.ajax('config.json').done(function(data) {
+ config = data;
+ resolve();
+ }).fail(function() {
+ console.error("Failed to get config.");
+ ga('send', 'event', 'error', 'config');
+ reject();
+ });
+ }), new Promise(function(resolve, reject) {
+ var timeout = setTimeout(function() {
+ console.error("Document never loaded? Something bad has happened!");
+ reject();
+ }, 10000);
+ $(function() {
+ clearTimeout(timeout);
+ resolve();
+ });
+ }), new Promise(function(resolve, reject) {
+ $.getJSON('../conversions.json').done(function(data) {
+ conversions = data;
+ resolve();
+ }).fail(function() {
+ console.error("Failed to get conversions.");
+ ga('send', 'event', 'error', 'config');
+ //reject(); We will continue anyways. We don't need this functionality.
+ conversions = {};
+ resolve();
+ });
+ })]).then(function() {
+ var getParameterByName = function(name) {
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+ var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
+ var results = regex.exec(location.search);
+ return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+ }
+ //Overwrite config if present. Any failure will just cause this to be skipped.
+ try {
+ var configParam = JSON.parse(getParameterByName('config'));
+ config = jQuery.extend(true, config, configParam);
+ } catch (e) {
+ console.warn("Failure in config overwrite, skipping.", e);
+ }
+ new Atmos(config,conversions);
+ }, function() {
+ console.error("Failed to initialize!");
+ ga('send', 'event', 'error', 'init');
+ });
+
+})();
+var Atmos = (function() {
+ "use strict";
+ var closeButton = '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>';
+ var guid = function() {
+ var d = new Date().getTime();
+ var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (d + Math.random() * 16) % 16 | 0;
+ d = Math.floor(d / 16);
+ return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
+ });
+ return uuid;
+ }
+ /**
+ * Atmos
+ * @version 2.0
+
+ * Configures an Atmos object. This manages the atmos interface.
+
+ * @constructor
+ * @param {string} catalog - NDN path
+ * @param {Object} config - Object of configuration options for a Face.
+ */
+ var Atmos = function(config, conversions) {
+ //Internal variables.
+ this.results = [];
+ this.resultCount = Infinity;
+ this.name = null ;
+ this.page = 0;
+ this.resultsPerPage = 25;
+ this.retrievedSegments = 0;
+
+ //Config/init
+ this.config = config;
+ this.conversions = conversions;
+
+ this.catalog = config['global']['catalogPrefix'];
+ this.catalogPrefix = new Name(this.catalog);
+ this.face = new Face(config['global']['faceConfig']);
+
+ //Easy access dom variables
+ this.categories = $('#side-menu');
+ this.resultTable = $('#resultTable');
+ this.filters = $('#filters');
+ this.searchInput = $('#search');
+ this.searchBar = $('#searchBar');
+ this.searchButton = $('#searchButton');
+ this.resultMenu = $('.resultMenu');
+ this.alerts = $('#alerts');
+ this.requestForm = $('#requestForm');
+
+ var scope = this;
+ $('.requestSelectedButton').click(function() {
+ ga('send', 'event', 'button', 'click', 'request');
+ scope.request(scope.resultTable.find('.resultSelector:checked:not([disabled])').parent().parent());
+ });
+ this.filterSetup();
+
+ //Init autocomplete
+ this.searchInput.autoComplete(function(field, callback) {
+ ga('send', 'event', 'search', 'autocomplete');
+ scope.autoComplete(field, function(data) {
+ var list = data.next;
+ var last = data.lastComponent === true;
+ callback(list.map(function(element) {
+ return field + element + (last ? "/" : "");
+ //Don't add trailing slash for last component.
+ }));
+ });
+ });
+
+ //Handle search
+ this.searchBar.submit(function(e) {
+ ga('send', 'event', 'search', 'submit');
+ e.preventDefault();
+ if (scope.searchInput.val().length === 0) {
+ if (!scope.searchBar.hasClass('has-error')) {
+ scope.searchBar.addClass('has-error').append('<span class="help-block">Search path is required!</span>');
+ }
+ return;
+ } else {
+ scope.searchBar.removeClass('has-error').find('.help-block').fadeOut(function() {
+ $(this).remove()
+ });
+ }
+ scope.pathSearch();
+ });
+
+ this.searchButton.click(function() {
+ console.log("Search Button Pressed");
+ ga('send', 'event', 'button', 'click', 'search');
+ scope.search();
+ });
+
+ //Result navigation handlers
+ this.resultMenu.find('.next').click(function() {
+ ga('send', 'event', 'button', 'click', 'next');
+ if (!$(this).hasClass('disabled')) {
+ scope.getResults(scope.page + 1);
+ }
+ });
+
+ this.resultMenu.find('.previous').click(function() {
+ ga('send', 'event', 'button', 'click', 'previous');
+ if (!$(this).hasClass('disabled')) {
+ scope.getResults(scope.page - 1);
+ }
+ });
+
+ this.resultMenu.find('.clearResults').click(function() {
+ ga('send', 'event', 'button', 'click', 'resultClear');
+ scope.clearResults();
+ $('#results').fadeOut(function() {
+ $(this).addClass('hidden');
+ });
+ });
+
+ //Change the number of results per page handler
+ var rpps = $('.resultsPerPageSelector').click(function() {
+ var t = $(this);
+ if (t.hasClass('active')) {
+ return;
+ }
+ rpps.find('.active').removeClass('active');
+ t.addClass('active');
+ scope.resultsPerPage = Number(t.text());
+ scope.getResults(0);
+ //Force return to page 1;
+ });
+
+ //Init tree search
+ $('#treeSearch div').treeExplorer(function(path, callback) {
+ console.log("Tree Explorer request", path);
+ ga('send', 'event', 'tree', 'request');
+ scope.autoComplete(path, function(data) {
+ var list = data.next;
+ var last = (data.lastComponent === true);
+ if (last) {
+ console.log("Redirecting last element request to a search.");
+ scope.clearResults();
+ scope.query(scope.catalog, {
+ '??': path
+ }, function(interest, data) {
+ console.log("Search response", interest, data);
+ scope.name = interest.getName();
+ scope.getResults(0);
+ }, function(interest) {
+ console.warn("Failed to retrieve final component.", interest, path);
+ scope.createAlert("Failed to request final component. " + path + " See console for details.");
+ });
+ return;
+ //Don't call the callback
+ }
+ console.log("Autocomplete response", list);
+ callback(list.map(function(element) {
+ return (path == "/" ? "/" : "") + element + "/";
+ }));
+ });
+ });
+
+ $('#treeSearch').on('click', '.treeSearch', function() {
+ var t = $(this);
+ scope.clearResults();
+ var path = t.parent().parent().attr('id');
+ console.log("Tree search:", path);
+ scope.query(scope.catalog, {
+ '??': path
+ }, function(interest, data) {
+ //Success
+ console.log("Tree search response", interest, data);
+ scope.name = interest.getName();
+ scope.getResults(0);
+ }, function(interest) {
+ //Failure
+ console.warn("Request failed! Timeout", interest);
+ scope.createAlert("Request timed out.\"" + interest.getName().toUri() + "\" See console for details.");
+ });
+ });
+
+ this.setupRequestForm();
+ this.resultTable.popover({
+ selector: ".metaDataLink",
+ content: function() {
+ $('.metaDataLink').not(this).popover('destroy');
+ return scope.getMetaData(this);
+ },
+ title: "Metadata",
+ html: true,
+ trigger: 'click',
+ placement: 'bottom'
+ });
+
+ this.resultTable.on('click', '.metaDataLink', function(e) {
+ //This prevents the page from scrolling when you click on a name.
+ e.preventDefault();
+ });
+
+ this.resultTable.on('click', '.subsetButton', function() {
+ var metaData = $(this).siblings('pre').text();
+ var exp = /netcdf ([\w-]+)/;
+ var match = exp.exec(metaData);
+ var filename = match[0].replace(/netcdf /, '') + '.nc';
+ scope.request(null , filename);
+ });
+
+ //Allow the title to change the tab
+ $('#brand-title').click(function() {
+ //Correct active class on tabs.
+ $('#path-search-tab').removeClass('active');
+ $('#tree-search-tab').removeClass('active');
+ $('#search-tab').addClass('active');
+ });
+ }
+ Atmos.prototype.clearResults = function() {
+ this.results = [];
+ //Drop any old results.
+ this.retrievedSegments = 0;
+ this.resultCount = Infinity;
+ this.page = 0;
+ this.resultTable.empty();
+ }
+
+ Atmos.prototype.pathSearch = function() {
+ var value = this.searchInput.val();
+ this.clearResults();
+ var scope = this;
+ this.query(this.catalog, {
+ "??": value
+ }, function(interest, data) {
+ console.log("Query response:", interest, data);
+ scope.name = interest.getName();
+ scope.getResults(0);
+ }, function(interest) {
+ console.warn("Request failed! Timeout", interest);
+ scope.createAlert("Request timed out. \"" + interest.getName().toUri() + "\" See console for details.");
+ });
+ }
+
+ Atmos.prototype.search = function() {
+ var filters = this.getFilters();
+ console.log("Search started!", this.searchInput.val(), filters);
+ console.log("Initiating query");
+ this.clearResults();
+ var scope = this;
+ this.query(this.catalog, filters, function(interest, data) {
+ //Response function
+ console.log("Query Response:", interest, data);
+ scope.name = interest.getName();
+ scope.getResults(0);
+ }, function(interest) {
+ //Timeout function
+ console.warn("Request failed after 3 attempts!", interest);
+ scope.createAlert("Request failed after 3 attempts. \"" + interest.getName().toUri() + "\" See console for details.");
+ });
+ }
+
+ Atmos.prototype.autoComplete = function(field, callback) {
+ var scope = this;
+ var result = {};
+ const getAll = function(interest, data) {
+ if (data.getContent().length !== 0) {
+ var resp = JSON.parse(data.getContent().toString().replace(/[\n\0]/g, ""));
+ if (result.next) {
+ result.next = result.next.concat(resp.next);
+ } else {
+ result = resp;
+ }
+ } else {
+ callback(result);
+ }
+ var name = data.getName();
+ var segment = name.components[name.getComponentCount() - 1];
+ if (segment.toSegment() !== data.getMetaInfo().getFinalBlockId().toSegment()) {
+ name = name.getPrefix(-1);
+ //Remove segment
+ name.appendSegment(segment.toSegment() + 1);
+ scope.expressInterest(name, getAll, function() {
+ console.warn("Autocomplete timed out, results may be incomplete.");
+ callback(result);
+ //Return if we get a timeout.
+ });
+ } else {
+ callback(result);
+ }
+ }
+ this.query(this.catalog, {
+ "?": field
+ }, getAll);
+ }
+
+ Atmos.prototype.showResults = function(resultIndex) {
+ var results = this.results.slice(this.resultsPerPage * resultIndex, this.resultsPerPage * (resultIndex + 1));
+ var resultDOM = $(results.reduce(function(prev, current) {
+ prev.push('<tr><td><input class="resultSelector" type="checkbox"></td><td class="popover-container"><a href="#" class="metaDataLink">');
+ prev.push(current);
+ prev.push('</a></td></tr>');
+ return prev;
+ }, ['<tr><th><input id="resultSelectAll" type="checkbox"> Select All</th><th>Name</th></tr>']).join(''));
+ resultDOM.find('#resultSelectAll').click(function() {
+ if ($(this).is(':checked')) {
+ resultDOM.find('.resultSelector:not([disabled])').prop('checked', true);
+ } else {
+ resultDOM.find('.resultSelector:not([disabled])').prop('checked', false);
+ }
+ });
+ this.resultTable.hide().empty().append(resultDOM).slideDown('slow');
+ this.resultMenu.find('.pageNumber').text(resultIndex + 1);
+ this.resultMenu.find('.pageLength').text(this.resultsPerPage * resultIndex + results.length);
+ if (this.resultsPerPage * (resultIndex + 1) >= this.resultCount) {
+ this.resultMenu.find('.next').addClass('disabled');
+ } else if (resultIndex === 0) {
+ this.resultMenu.find('.next').removeClass('disabled');
+ }
+ if (resultIndex === 0) {
+ this.resultMenu.find('.previous').addClass('disabled');
+ } else if (resultIndex === 1) {
+ this.resultMenu.find('.previous').removeClass('disabled');
+ }
+ $.scrollTo("#results", 500, {
+ interrupt: true
+ });
+ }
+
+ Atmos.prototype.getResults = function(index) {
+
+ var scope = this;
+
+ if ($('#results').hasClass('hidden')) {
+ $('#results').removeClass('hidden').slideDown();
+ }
+
+ if ((scope.results.length === scope.resultCount) || (scope.resultsPerPage * (index + 1) < scope.results.length)) {
+ //console.log("We already have index", index);
+ scope.page = index;
+ scope.showResults(index);
+ return;
+ }
+
+ if (scope.name === null ) {
+ console.error("This shouldn't be reached! We are getting results before a search has occured!");
+ throw new Error("Illegal State");
+ }
+
+ var interestName = new Name(scope.name);
+ // Interest name should be /<catalog-prefix>/query/<query-param>/<version>/<#seq>
+ if (scope.name.size() === (scope.catalogPrefix.size() + 3)) {
+ interestName = interestName.appendSegment(scope.retrievedSegments++);
+ //console.log("Requesting data index: (", scope.retrievedSegments - 1, ") at ", interestName.toUri());
+ }
+
+ this.expressInterest(interestName, function(interest, data) {
+ //Response
+ if (data.getContent().length === 0) {
+ scope.resultMenu.find('.totalResults').text(0);
+ scope.resultMenu.find('.pageNumber').text(0);
+ scope.resultMenu.find('.pageLength').text(0);
+ console.log("Empty response.");
+ scope.resultTable.html("<tr><td>Empty response. This usually means no results.</td></tr>");
+ return;
+ }
+
+ var content = JSON.parse(data.getContent().toString().replace(/[\n\0]/g, ""));
+
+ if (!content.results) {
+ scope.resultMenu.find('.totalResults').text(0);
+ scope.resultMenu.find('.pageNumber').text(0);
+ scope.resultMenu.find('.pageLength').text(0);
+ console.log("No results were found!");
+ scope.resultTable.html("<tr><td>No Results</td></tr>");
+ return;
+ }
+
+ scope.results = scope.results.concat(content.results);
+ scope.resultCount = content.resultCount;
+ scope.resultMenu.find('.totalResults').text(scope.resultCount);
+ scope.page = index;
+ // reset scope.name
+ scope.name = new Name(data.getName().getPrefix(scope.catalogPrefix.size() + 3));
+ scope.getResults(index);
+ //Keep calling this until we have enough data.
+ }, function() {});//Ignore failure
+
+ }
+ Atmos.prototype.query = function(prefix, parameters, callback, timeout) {
+ var queryPrefix = new Name(prefix);
+ queryPrefix.append("query");
+ var jsonString = JSON.stringify(parameters);
+ queryPrefix.append(jsonString);
+ this.expressInterest(queryPrefix, callback, timeout);
+ }
+
+ Atmos.prototype.expressInterest = function(name, success, failure) {
+ var interest = new Interest(name);
+ interest.setInterestLifetimeMilliseconds(500);
+ interest.setMustBeFresh(true);
+ const face = this.face;
+ async.retry(4, function(done) {
+ face.expressInterest(interest, function(interest, data) {
+ done();
+ success(interest, data);
+ }, function(interest) {
+ done("Interest timed out 4 times.", interest);
+ });
+ }, function(err, interest) {
+ if (err) {
+ console.log(err, interest);
+ failure(interest);
+ }
+ });
+ }
+
+ /**
+ * This function returns a map of all the categories active filters.
+ * @return {Object<string, string>}
+ */
+ Atmos.prototype.getFilters = function() {
+ var filters = this.filters.children().toArray().reduce(function(prev, current) {
+ var data = $(current).text().split(/:/);
+ prev[data[0]] = data[1];
+ return prev;
+ }, {});
+ //Collect a map<category, filter>.
+ //TODO Make the return value map<category, Array<filter>>
+ return filters;
+ }
+
+ /**
+ * Creates a closable alert for the user.
+
+ * @param {string} message
+ * @param {string} type - Override the alert type.
+ */
+ Atmos.prototype.createAlert = function(message, type) {
+ var alert = $('<div class="alert"><div>');
+ alert.addClass(type ? type : 'alert-info');
+ alert.text(message);
+ alert.append(closeButton);
+ this.alerts.append(alert);
+ }
+
+ /**
+ * Requests all of the names represented by the buttons in the elements list.
+
+ * @param elements {Array<jQuery>} A list of the table row elements
+ * @param subsetFileName {String} If present then do a subsetting request instead.
+ */
+ Atmos.prototype.request = function() {
+ //Pseudo globals.
+ var keyChain;
+ var certificateName;
+ var keyAdded = false;
+ return function(elements, subsetFilename) {
+
+ var names = [];
+
+ $(elements).find('.metaDataLink').each(function() {
+ var name = $(this).text();
+ names.push(name);
+ });
+ var subset = false;
+ if (!subsetFilename) {
+ $('#subsetting').hide();
+ } else {
+ $('#subsetting').show();
+ subset = true;
+ }
+
+ var scope = this;
+
+ //FIXME The following is temporary, it allows people to direct download from
+ //a single host with a small set of names. It is to demo the functionality but
+ //could use improvement. (Multiple servers, non static list, etc)
+ var directDls = $('#directDownloadList').empty();
+ names.forEach(function(name) {
+ if (scope.conversions[name]) {
+ //If the name exists in the conversions.
+ var ele = $('<a href="http://atmos-mwsc.ucar.edu/ucar/' + conversions[name] + '" class="list-group-item>' + name + '</a>');
+ directDls.append(ele);
+ }
+ });
+
+ this.requestForm.on('submit', function(e) {
+ //This will be registered for the next submit from the form.
+ e.preventDefault();
+ $('#request .alert').remove();
+ var variables = [];
+ if (subset) {
+ $('#subsetVariables .row').each(function() {
+ var t = $(this);
+ var values = {};
+ t.find('.values input').each(function() {
+ var t = $(this);
+ values[t.attr('name')] = t.val();
+ });
+ variables.push({
+ variable: t.find('.variable').val(),
+ values: values
+ });
+ });
+ }
+
+ //Form checking
+ var dest = scope.requestForm.find('#requestDest .active');
+ if (dest.length !== 1) {
+ var alert = $('<div class="alert alert-warning">A destination is required!' + closeButton + '<div>');
+ $('#request > .panel-body').append(alert);
+ return;
+ }
+
+ $('#request').modal('hide');
+
+ //Initial params are ok. We can close the form.
+ scope.cleanRequestForm();
+
+ $(this).off(e); //Don't fire this again, the request must be regenerated
+
+ //Key setup
+ if (!keyAdded) {
+ if (!scope.config.retrieval.demoKey || !scope.config.retrieval.demoKey.pub || !scope.config.retrieval.demoKey.priv) {
+ scope.createAlert("This host was not configured to handle retrieval! See console for details.", 'alert-danger');
+ console.error("Missing/invalid key! This must be configured in the config on the server.", scope.config.demoKey);
+ return;
+ }
+ //FIXME base64 may or may not exist in other browsers. Need a new polyfill.
+ var pub = new Buffer(base64.toByteArray(scope.config.retrieval.demoKey.pub));
+ //MUST be a Buffer (Buffer != Uint8Array)
+ var priv = new Buffer(base64.toByteArray(scope.config.retrieval.demoKey.priv));
+ var identityStorage = new MemoryIdentityStorage();
+ var privateKeyStorage = new MemoryPrivateKeyStorage();
+ keyChain = new KeyChain(new IdentityManager(identityStorage,privateKeyStorage),new SelfVerifyPolicyManager(identityStorage));
+ var keyName = new Name("/retrieve/DSK-123");
+ certificateName = keyName.getSubName(0, keyName.size() - 1).append("KEY").append(keyName.get(-1)).append("ID-CERT").append("0");
+ identityStorage.addKey(keyName, KeyType.RSA, new Blob(pub,false));
+ privateKeyStorage.setKeyPairForKeyName(keyName, KeyType.RSA, pub, priv);
+ scope.face.setCommandSigningInfo(keyChain, certificateName);
+ keyAdded = true;
+ }
+
+ //Retrieval
+ var retrievePrefix = new Name("/catalog/ui/" + guid());
+ scope.face.registerPrefix(retrievePrefix, function(prefix, interest, face, interestFilterId, filter) {
+ //On Interest
+ //This function will exist until the page exits but will likely only be used once.
+ var data = new Data(interest.getName());
+ var content;
+ if (subset) {
+ content = JSON.stringify({
+ name: subsetFilename,
+ subset: variables
+ });
+ } else {
+ content = JSON.stringify(names);
+ }
+
+ //Blob breaks the data! Don't use it
+ data.setContent(content);
+
+ //TODO Packetize this.
+ keyChain.sign(data, certificateName);
+
+ try {
+ face.putData(data);
+ console.log("Responded for", interest.getName().toUri(), data);
+ scope.createAlert("Data retrieval has initiated.", "alert-success");
+ } catch (e) {
+ console.error("Failed to respond to", interest.getName().toUri(), data);
+ scope.createAlert("Data retrieval failed.");
+ }
+ }, function(prefix) {
+ //On fail
+ scope.createAlert("Failed to register the retrieval URI! See console for details.", "alert-danger");
+ console.error("Failed to register URI:", prefix.toUri(), prefix);
+ }, function(prefix, registeredPrefixId) {
+ //On success
+ var name = new Name(dest.text());
+ name.append(prefix);
+ scope.expressInterest(name, function(interest, data) {
+ //Success
+ console.log("Request for", name.toUri(), "succeeded.", interest, data);
+ }, function() {
+ console.warn("Failed to request from retrieve agent.");
+ });
+ });
+ });
+ $('#request').modal();
+ //This forces the form to be the only option.
+ }
+ }();
+
+ Atmos.prototype.filterSetup = function() {
+ //Filter setup
+ var prefix = new Name(this.catalog).append("filters-initialization");
+
+ var scope = this;
+
+ this.getAll(prefix, function(data) {
+ //Success
+ var raw = JSON.parse(data.replace(/[\n\0]/g, ''));
+ //Remove null byte and parse
+ console.log("Filter categories:", raw);
+
+ $.each(raw, function(index, object) {
+ //Unpack list of objects
+
+ $.each(object, function(category, searchOptions) {
+ //Unpack category from object (We don't know what it is called)
+ //Create the category
+ var e = $('<li><a href="#">' + category.replace(/_/g, " ") + '</a><ul class="subnav nav nav-pills nav-stacked"></ul></li>');
+ var sub = e.find('ul.subnav');
+ $.each(searchOptions, function(index, name) {
+ //Create the filter list inside the category
+
+ var item = $('<li><a href="#">' + name + '</a></li>');
+ sub.append(item);
+ item.click(function() {
+ //Click on the side menu filters
+ if (item.hasClass('active')) {
+ //Does the filter already exist?
+ item.removeClass('active');
+ scope.filters.find(':contains(' + category + ':' + name + ')').remove();
+ } else {
+ //Add a filter
+ item.addClass('active');
+ var filter = $('<span class="label label-default"></span>');
+ filter.text(category + ':' + name);
+ scope.filters.append(filter);
+ filter.click(function() {
+ //Click on a filter
+ filter.remove();
+ item.removeClass('active');
+ });
+ }
+ });
+ });
+ //Toggle the menus. (Only respond when the immediate tab is clicked.)
+ e.find('> a').click(function() {
+ scope.categories.find('.subnav').slideUp();
+ var t = $(this).siblings('.subnav');
+ if (!t.is(':visible')) {
+ //If the sub menu is not visible
+ t.slideDown(function() {
+ t.triggerHandler('focus');
+ });
+ //Make it visible and look at it.
+ }
+ });
+ scope.categories.append(e);
+ });
+ });
+ }, function(interest) {
+ //Timeout
+ scope.createAlert("Failed to initialize the filters!", "alert-danger");
+ console.error("Failed to initialize filters!", interest);
+ ga('send', 'event', 'error', 'filters');
+ });
+ }
+
+ /**
+ * This function retrieves all segments in order until it knows it has reached the last one.
+ * It then returns the final joined result.
+
+ * @param prefix {String|Name} The ndn name we are retrieving.
+ * @param callback {function(String)} if successful, will call the callback with a string of data.
+ * @param failure {function(Interest)} if unsuccessful, will call failure with the last failed interest.
+ * @param stop {boolean} stop if no finalBlock.
+ */
+ Atmos.prototype.getAll = function(prefix, callback, failure, stop) {
+ var scope = this;
+ var d = [];
+ var name = new Name(prefix);
+ var segment = 0;
+ var request = function() {
+ var n2 = new Name(name);
+ n2.appendSegment(segment);
+ scope.expressInterest(n2, handleData, function(err, interest) {
+ failure(interest)
+ });
+ //Forward to handleData and ignore error
+ }
+ var handleData = function(interest, data) {
+ d.push(data.getContent().toString());
+ var hasFinalBlock = data.getMetaInfo().getFinalBlockId().value.length === 0;
+ var finalBlockStop = hasFinalBlock && stop;
+ if (finalBlockStop || (!hasFinalBlock && interest.getName().get(-1).toSegment() == data.getMetaInfo().getFinalBlockId().toSegment())) {
+ callback(d.join(""));
+ } else {
+ segment++;
+ request();
+ }
+ }
+ request();
+ }
+
+ Atmos.prototype.cleanRequestForm = function() {
+ $('#requestDest').prev().removeClass('btn-success').addClass('btn-default');
+ $('#requestDropText').text('Destination');
+ $('#requestDest .active').removeClass('active');
+ $('#subsetMenu').attr('class', 'collapse');
+ $('#subsetVariables').empty();
+ $('#request .alert').alert('close').remove();
+ }
+
+ Atmos.prototype.setupRequestForm = function() {
+ var scope = this;
+ this.requestForm.find('#requestCancel').click(function() {
+ $('#request').unbind('submit')//Removes all event handlers.
+ .modal('hide');
+ //Hides the form.
+ scope.cleanRequestForm();
+ });
+ var dests = $(this.config['retrieval']['destinations'].reduce(function(prev, current) {
+ prev.push('<li><a href="#">');
+ prev.push(current);
+ prev.push("</a></li>");
+ return prev;
+ }, []).join(""));
+ this.requestForm.find('#requestDest').append(dests).on('click', 'a', function(e) {
+ $('#requestDest .active').removeClass('active');
+ var t = $(this);
+ t.parent().addClass('active');
+ $('#requestDropText').text(t.text());
+ $('#requestDest').prev().removeClass('btn-default').addClass('btn-success');
+ });
+ var addVariable = function(selector) {
+ var ele = $(selector).clone().attr('id', '');
+ ele.find('.close').click(function() {
+ ele.remove();
+ });
+ $('#subsetVariables').append(ele);
+ }
+ $('#subsetAddVariableBtn').click(function() {
+ addVariable('#customTemplate');
+ });
+ $('#subsetAddTimeVariable').click(function() {
+ addVariable('#timeTemplate');
+ });
+ $('#subsetAddLocVariable').click(function() {
+ addVariable('#locationTemplate');
+ });
+ }
+
+ Atmos.prototype.getMetaData = (function() {
+ var cache = {};
+ return function(element) {
+ var name = $(element).text();
+ ga('send', 'event', 'request', 'metaData');
+ var subsetButton = '<button class="btn btn-default subsetButton" type="button">Subset</button>';
+ if (cache[name]) {
+ return [subsetButton, '<pre class="metaData">', cache[name], '</pre>'].join('');
+ }
+ var prefix = new Name(name).append("metadata");
+ var id = guid();
+ //We need an id because the return MUST be a string.
+ var ret = '<div id="' + id + '"><span class="fa fa-spinner fa-spin"></span></div>';
+ this.getAll(prefix, function(data) {
+ var el = $('<pre class="metaData"></pre>');
+ el.text(data);
+ var container = $('<div></div>');
+ container.append($(subsetButton));
+ container.append(el);
+ $('#' + id).empty().append(container);
+ cache[name] = data;
+ }, function(interest) {
+ $('#' + id).text("The metadata is unavailable for this name.");
+ console.log("Data is unavailable for " + name);
+ });
+ return ret;
+ }
+ })();
+
+ return Atmos;
+
+})();
diff --git a/client/catalog/js/treeExplorer.js b/client/catalog/js/treeExplorer.js
new file mode 100644
index 0000000..58a6a69
--- /dev/null
+++ b/client/catalog/js/treeExplorer.js
@@ -0,0 +1,91 @@
+
+(function(){
+ "use strict";
+ jQuery.fn.extend({
+
+ treeExplorer: function(getChildren, settings){
+
+ this.settings = {
+ autoScroll : false
+ }
+
+ for (var value in settings) {
+ if (this.settings[value] !== undefined){
+ this.settings[value] = settings[value];
+ }
+ }
+
+ var cache = {}; //Cache previously requested paths.
+
+ var tree = $('<div class="treeExplorer"></div>');
+ this.append(tree);
+
+ var lookup = function(path, callback){
+ if (cache[path]){
+ callback(path, cache[path]);
+ } else {
+ getChildren(path, function(children){
+ cache[path] = children;
+ callback(path, children);
+ });
+ }
+ }
+
+ var append = function(path, children, node){
+ var c = $('<div class="nodeChildren"></div>');
+ node.append(c);
+ children.forEach(function(current){
+ var el = $('<div class="treeExplorerNode"></div>');
+ if (current.match(/\/$/)){
+ el.attr('id', path + current);
+ el.append(['<div class="nodeContent"><a class="treeExplorerExpander"></a><a class="treeSearch" href="#', path, current, '">', current,
+ '</a></div>'].join(""));
+ } else {
+ el.addClass('file');
+ el.text(current);
+ }
+ c.append(el);
+ });
+ }
+
+ var scope = this;
+
+ tree.on('click', '.treeExplorerExpander', function(e){
+ if (!scope.settings.autoScroll){
+ e.preventDefault();
+ }
+
+ var node = $(this).parent().parent();
+
+ if (node.hasClass('open')){ //Are we open already?
+ node.removeClass('open');
+ return;
+ } else { //We need to open
+ if (node.find('.treeExplorerNode').length > 0){ //We already have children
+ node.addClass('open');
+ } else { //We need to get the children.
+ var path = node.attr('id');
+ lookup(path, function(path, children){
+ if (children.length === 0){
+ node.addClass('file');
+ var name = node.find('a').text().replace(/\/$/, "");
+ node.empty().text(name);
+ } else {
+ append(path, children, node);
+ node.addClass('open');
+ }
+ });
+ }
+ }
+
+ });
+
+ getChildren("/", function(children){
+ append("", children, tree);
+ });
+
+ return this;
+
+ }
+ })
+})();
diff --git a/client/catalog/variables.less b/client/catalog/variables.less
new file mode 100644
index 0000000..6a354d2
--- /dev/null
+++ b/client/catalog/variables.less
@@ -0,0 +1,390 @@
+/*! Generated by Live LESS Theme Customizer */
+
+@gray-base: rgb(0, 0, 0);
+@gray-darker: lighten(@gray-base, 13.5%);
+@gray-dark: lighten(@gray-base, 20%);
+@gray: lighten(@gray-base, 33.5%);
+@gray-light: lighten(@gray-base, 46.7%);
+@gray-lighter: lighten(@gray-base, 93.5%);
+@brand-primary: rgb(47, 164, 231);
+@brand-success: rgb(115, 168, 57);
+@brand-info: rgb(3, 60, 115);
+@brand-warning: rgb(221, 86, 0);
+@brand-danger: rgb(199, 28, 34);
+@body-bg: rgb(255, 255, 255);
+@text-color: @gray-dark;
+@link-color: @brand-primary;
+@link-hover-color: darken(@link-color, 15%);
+@link-hover-decoration: underline;
+@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+@font-size-base: 16px;
+@font-size-large: ceil((@font-size-base * 1.25));
+@font-size-small: ceil((@font-size-base * 0.85));
+@font-size-h1: floor((@font-size-base * 2.6));
+@font-size-h2: floor((@font-size-base * 2.15));
+@font-size-h3: ceil((@font-size-base * 1.7));
+@font-size-h4: ceil((@font-size-base * 1.25));
+@font-size-h5: @font-size-base;
+@font-size-h6: ceil((@font-size-base * 0.85));
+@line-height-base: 1.428571429;
+@line-height-computed: floor((@font-size-base * @line-height-base));
+@headings-font-family: @font-family-base;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+@headings-color: rgb(49, 126, 172);
+@icon-font-path: "../fonts/";
+@icon-font-name: "glyphicons-halflings-regular";
+@icon-font-svg-id: "glyphicons_halflingsregular";
+@padding-base-vertical: 8px;
+@padding-base-horizontal: 12px;
+@padding-large-vertical: 14px;
+@padding-large-horizontal: 16px;
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+@padding-xs-vertical: 1px;
+@padding-xs-horizontal: 5px;
+@line-height-large: 1.3333333;
+@line-height-small: 1.5;
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+@component-active-color: rgb(255, 255, 255);
+@component-active-bg: @brand-primary;
+@caret-width-base: 4px;
+@caret-width-large: 5px;
+@table-cell-padding: 8px;
+@table-condensed-cell-padding: 5px;
+@table-bg: transparent;
+@table-bg-accent: rgb(249, 249, 249);
+@table-bg-hover: rgb(245, 245, 245);
+@table-bg-active: @table-bg-hover;
+@table-border-color: rgb(221, 221, 221);
+@btn-font-weight: normal;
+@btn-default-color: @text-color;
+@btn-default-bg: rgb(255, 255, 255);
+@btn-default-border: rgba(0, 0, 0, 0.1);
+@btn-primary-color: rgb(255, 255, 255);
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-primary-bg, 5%);
+@btn-success-color: rgb(255, 255, 255);
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-success-bg, 5%);
+@btn-info-color: rgb(255, 255, 255);
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-info-bg, 5%);
+@btn-warning-color: rgb(255, 255, 255);
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-warning-bg, 5%);
+@btn-danger-color: rgb(255, 255, 255);
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-danger-bg, 5%);
+@btn-link-disabled-color: @gray-light;
+@btn-border-radius-base: @border-radius-base;
+@btn-border-radius-large: @border-radius-large;
+@btn-border-radius-small: @border-radius-small;
+@input-bg: rgb(255, 255, 255);
+@input-bg-disabled: @gray-lighter;
+@input-color: @gray;
+@input-border: rgb(204, 204, 204);
+@input-border-radius: @border-radius-base;
+@input-border-radius-large: @border-radius-large;
+@input-border-radius-small: @border-radius-small;
+@input-border-focus: rgb(102, 175, 233);
+@input-color-placeholder: @gray-light;
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+@form-group-margin-bottom: 15px;
+@legend-color: @gray-dark;
+@legend-border-color: rgb(229, 229, 229);
+@input-group-addon-bg: @gray-lighter;
+@input-group-addon-border-color: @input-border;
+@cursor-disabled: not-allowed;
+@dropdown-bg: rgb(255, 255, 255);
+@dropdown-border: rgba(0, 0, 0, 0.15);
+@dropdown-fallback-border: rgb(204, 204, 204);
+@dropdown-divider-bg: rgb(229, 229, 229);
+@dropdown-link-color: @gray-dark;
+@dropdown-link-hover-color: rgb(255, 255, 255);
+@dropdown-link-hover-bg: @component-active-bg;
+@dropdown-link-active-color: rgb(255, 255, 255);
+@dropdown-link-active-bg: @component-active-bg;
+@dropdown-link-disabled-color: @gray-light;
+@dropdown-header-color: @gray-light;
+@dropdown-caret-color: rgb(0, 0, 0);
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1060;
+@zindex-tooltip: 1070;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+@screen-xs: 480px;
+@screen-xs-min: @screen-xs;
+@screen-phone: @screen-xs-min;
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+@screen-tablet: @screen-sm-min;
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+@screen-desktop: @screen-md-min;
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+@screen-lg-desktop: @screen-lg-min;
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+@grid-columns: 12;
+@grid-gutter-width: 30px;
+@grid-float-breakpoint: @screen-sm-min;
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+@container-tablet: (720px + @grid-gutter-width);
+@container-sm: @container-tablet;
+@container-desktop: (940px + @grid-gutter-width);
+@container-md: @container-desktop;
+@container-large-desktop: (1140px + @grid-gutter-width);
+@container-lg: @container-large-desktop;
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height: 340px;
+@navbar-default-color: rgb(221, 221, 221);
+@navbar-default-bg: @brand-primary;
+@navbar-default-border: darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-color: rgb(255, 255, 255);
+@navbar-default-link-hover-color: rgb(255, 255, 255);
+@navbar-default-link-hover-bg: darken(@navbar-default-bg, 10%);
+@navbar-default-link-active-color: rgb(255, 255, 255);
+@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color: rgb(221, 221, 221);
+@navbar-default-link-disabled-bg: transparent;
+@navbar-default-brand-color: @navbar-default-link-color;
+@navbar-default-brand-hover-color: rgb(255, 255, 255);
+@navbar-default-brand-hover-bg: none;
+@navbar-default-toggle-hover-bg: darken(@navbar-default-bg, 10%);
+@navbar-default-toggle-icon-bar-bg: rgb(255, 255, 255);
+@navbar-default-toggle-border-color: darken(@navbar-default-bg, 10%);
+@navbar-inverse-color: rgb(255, 255, 255);
+@navbar-inverse-bg: @brand-info;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-color: rgb(255, 255, 255);
+@navbar-inverse-link-hover-color: rgb(255, 255, 255);
+@navbar-inverse-link-hover-bg: darken(@navbar-inverse-bg, 5%);
+@navbar-inverse-link-active-color: rgb(255, 255, 255);
+@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color: rgb(204, 204, 204);
+@navbar-inverse-link-disabled-bg: transparent;
+@navbar-inverse-brand-color: @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color: rgb(255, 255, 255);
+@navbar-inverse-brand-hover-bg: none;
+@navbar-inverse-toggle-hover-bg: darken(@navbar-inverse-bg, 5%);
+@navbar-inverse-toggle-icon-bar-bg: rgb(255, 255, 255);
+@navbar-inverse-toggle-border-color: darken(@navbar-inverse-bg, 5%);
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-lighter;
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+@nav-tabs-border-color: rgb(221, 221, 221);
+@nav-tabs-link-hover-border-color: @gray-lighter;
+@nav-tabs-active-link-hover-bg: @body-bg;
+@nav-tabs-active-link-hover-color: @gray;
+@nav-tabs-active-link-hover-border-color: rgb(221, 221, 221);
+@nav-tabs-justified-link-border-color: rgb(221, 221, 221);
+@nav-tabs-justified-active-link-border-color: @body-bg;
+@nav-pills-border-radius: @border-radius-base;
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: @component-active-color;
+@pagination-color: @link-color;
+@pagination-bg: rgb(255, 255, 255);
+@pagination-border: rgb(221, 221, 221);
+@pagination-hover-color: @link-hover-color;
+@pagination-hover-bg: @gray-lighter;
+@pagination-hover-border: rgb(221, 221, 221);
+@pagination-active-color: @gray-light;
+@pagination-active-bg: rgb(245, 245, 245);
+@pagination-active-border: @brand-primary;
+@pagination-disabled-color: @gray-light;
+@pagination-disabled-bg: rgb(255, 255, 255);
+@pagination-disabled-border: rgb(221, 221, 221);
+@pager-bg: @pagination-bg;
+@pager-border: @pagination-border;
+@pager-border-radius: 15px;
+@pager-hover-bg: @pagination-hover-bg;
+@pager-active-bg: @pagination-active-bg;
+@pager-active-color: @pagination-active-color;
+@pager-disabled-color: @pagination-disabled-color;
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: @gray-lighter;
+@jumbotron-heading-color: inherit;
+@jumbotron-font-size: ceil((@font-size-base * 1.5));
+@jumbotron-heading-font-size: ceil((@font-size-base * 4.5));
+@state-success-text: rgb(70, 136, 71);
+@state-success-bg: rgb(223, 240, 216);
+@state-success-border: darken(spin(@state-success-bg, -10), 5%);
+@state-info-text: rgb(58, 135, 173);
+@state-info-bg: rgb(217, 237, 247);
+@state-info-border: darken(spin(@state-info-bg, -10), 7%);
+@state-warning-text: rgb(192, 152, 83);
+@state-warning-bg: rgb(252, 248, 227);
+@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
+@state-danger-text: rgb(185, 74, 72);
+@state-danger-bg: rgb(242, 222, 222);
+@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
+@tooltip-max-width: 200px;
+@tooltip-color: rgb(255, 255, 255);
+@tooltip-bg: rgb(0, 0, 0);
+@tooltip-opacity: .9;
+@tooltip-arrow-width: 5px;
+@tooltip-arrow-color: @tooltip-bg;
+@popover-bg: rgb(255, 255, 255);
+@popover-max-width: 276px;
+@popover-border-color: rgba(0, 0, 0, 0.2);
+@popover-fallback-border-color: rgb(204, 204, 204);
+@popover-title-bg: darken(@popover-bg, 3%);
+@popover-arrow-width: 10px;
+@popover-arrow-color: @popover-bg;
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+@popover-arrow-outer-color: fadein(@popover-border-color, 5%);
+@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
+@label-default-bg: @gray-light;
+@label-primary-bg: @brand-primary;
+@label-success-bg: @brand-success;
+@label-info-bg: @brand-info;
+@label-warning-bg: @brand-warning;
+@label-danger-bg: @brand-danger;
+@label-color: rgb(255, 255, 255);
+@label-link-hover-color: rgb(255, 255, 255);
+@modal-inner-padding: 20px;
+@modal-title-padding: 15px;
+@modal-title-line-height: @line-height-base;
+@modal-content-bg: rgb(255, 255, 255);
+@modal-content-border-color: rgba(0, 0, 0, 0.2);
+@modal-content-fallback-border-color: rgb(153, 153, 153);
+@modal-backdrop-bg: rgb(0, 0, 0);
+@modal-backdrop-opacity: .5;
+@modal-header-border-color: rgb(229, 229, 229);
+@modal-footer-border-color: @modal-header-border-color;
+@modal-lg: 900px;
+@modal-md: 600px;
+@modal-sm: 300px;
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+@progress-bg: rgb(245, 245, 245);
+@progress-bar-color: rgb(255, 255, 255);
+@progress-border-radius: @border-radius-base;
+@progress-bar-bg: @brand-primary;
+@progress-bar-success-bg: @brand-success;
+@progress-bar-warning-bg: @brand-warning;
+@progress-bar-danger-bg: @brand-danger;
+@progress-bar-info-bg: @brand-info;
+@list-group-bg: rgb(255, 255, 255);
+@list-group-border: rgb(221, 221, 221);
+@list-group-border-radius: @border-radius-base;
+@list-group-hover-bg: rgb(245, 245, 245);
+@list-group-active-color: @component-active-color;
+@list-group-active-bg: @component-active-bg;
+@list-group-active-border: @list-group-active-bg;
+@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
+@list-group-disabled-color: @gray-light;
+@list-group-disabled-bg: @gray-lighter;
+@list-group-disabled-text-color: @list-group-disabled-color;
+@list-group-link-color: rgb(85, 85, 85);
+@list-group-link-hover-color: @list-group-link-color;
+@list-group-link-heading-color: rgb(51, 51, 51);
+@panel-bg: rgb(255, 255, 255);
+@panel-body-padding: 15px;
+@panel-heading-padding: 10px 15px;
+@panel-footer-padding: @panel-heading-padding;
+@panel-border-radius: @border-radius-base;
+@panel-inner-border: rgb(221, 221, 221);
+@panel-footer-bg: rgb(245, 245, 245);
+@panel-default-text: @gray-dark;
+@panel-default-border: rgb(221, 221, 221);
+@panel-default-heading-bg: rgb(245, 245, 245);
+@panel-primary-text: rgb(255, 255, 255);
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+@thumbnail-padding: 4px;
+@thumbnail-bg: @body-bg;
+@thumbnail-border: rgb(221, 221, 221);
+@thumbnail-border-radius: @border-radius-base;
+@thumbnail-caption-color: @text-color;
+@thumbnail-caption-padding: 9px;
+@well-bg: rgb(245, 245, 245);
+@well-border: darken(@well-bg, 7%);
+@badge-color: rgb(255, 255, 255);
+@badge-link-hover-color: rgb(255, 255, 255);
+@badge-bg: @gray-light;
+@badge-active-color: @link-color;
+@badge-active-bg: rgb(255, 255, 255);
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+@breadcrumb-padding-vertical: 8px;
+@breadcrumb-padding-horizontal: 15px;
+@breadcrumb-bg: rgb(245, 245, 245);
+@breadcrumb-color: rgb(204, 204, 204);
+@breadcrumb-active-color: @gray-light;
+@breadcrumb-separator: "/";
+@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
+@carousel-control-color: rgb(255, 255, 255);
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+@carousel-indicator-active-bg: rgb(255, 255, 255);
+@carousel-indicator-border-color: rgb(255, 255, 255);
+@carousel-caption-color: rgb(255, 255, 255);
+@close-font-weight: bold;
+@close-color: rgb(0, 0, 0);
+@close-text-shadow: 0 1px 0 #fff;
+@code-color: rgb(199, 37, 78);
+@code-bg: rgb(249, 242, 244);
+@kbd-color: rgb(255, 255, 255);
+@kbd-bg: rgb(51, 51, 51);
+@pre-bg: rgb(245, 245, 245);
+@pre-color: @gray-dark;
+@pre-border-color: rgb(204, 204, 204);
+@pre-scrollable-max-height: 340px;
+@component-offset-horizontal: 180px;
+@text-muted: @gray-light;
+@abbr-border-color: @gray-light;
+@headings-small-color: @gray-light;
+@blockquote-small-color: @gray-light;
+@blockquote-font-size: (@font-size-base * 1.25);
+@blockquote-border-color: @gray-lighter;
+@page-header-border-color: @gray-lighter;
+@dl-horizontal-offset: @component-offset-horizontal;
+@dl-horizontal-breakpoint: @grid-float-breakpoint;
+@hr-border: @gray-lighter;
+