<style>.container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px }
.container::before,.container::after { content: " "; display: table }
.container::after { clear: both }
.container::before,.container::after { content: " "; display: table }
.container::after { clear: both }
.row { margin-left: -15px; margin-right: -15px }
.row::before,.row::after { content: " "; display: table }
.row::after { clear: both }
.row::before,.row::after { content: " "; display: table }
.row::after { clear: both }
.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12 { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px }
.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12 { float: left }
.col-xs-12 { width: 100% }
.col-xs-11 { width: 91.66666667% }
.col-xs-10 { width: 83.33333333% }
.col-xs-9 { width: 75% }
.col-xs-8 { width: 66.66666667% }
.col-xs-7 { width: 58.33333333% }
.col-xs-6 { width: 50% }
.col-xs-5 { width: 41.66666667% }
.col-xs-4 { width: 33.33333333% }
.col-xs-3 { width: 25% }
.col-xs-2 { width: 16.66666667% }
.col-xs-1 { width: 8.33333333% }
.col-xs-pull-12 { right: 100% }
.col-xs-pull-11 { right: 91.66666667% }
.col-xs-pull-10 { right: 83.33333333% }
.col-xs-pull-9 { right: 75% }
.col-xs-pull-8 { right: 66.66666667% }
.col-xs-pull-7 { right: 58.33333333% }
.col-xs-pull-6 { right: 50% }
.col-xs-pull-5 { right: 41.66666667% }
.col-xs-pull-4 { right: 33.33333333% }
.col-xs-pull-3 { right: 25% }
.col-xs-pull-2 { right: 16.66666667% }
.col-xs-pull-1 { right: 8.33333333% }
.col-xs-pull-0 { right: 0 }
.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: 0 }
.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 }
table { max-width: 100%; background-color: transparent }
th { text-align: left }
.table { width: 100%; margin-bottom: 21px }
.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td { padding: 8px; line-height: 1.45; vertical-align: top; border-top: 1px solid #ddd }
.table>thead>tr>th { vertical-align: bottom; border-bottom: 2px solid #ddd }
.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td { border-top: 0 }
.table>tbody+tbody { border-top: 2px solid #ddd }
.table .table { background-color: none }
.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td { padding: 5px }
.table-bordered { border: 1px solid #ddd }
.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td { border: 1px solid #ddd }
.table-bordered>thead>tr>th,.table-bordered>thead>tr>td { border-bottom-width: 2px }
.table-striped>tbody>tr:nth-child(2n+1)>td,.table-striped>tbody>tr:nth-child(2n+1)>th { background-color: #f9f9f9 }
.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th { background-color: #f5f5f5 }
table col[class*="col-"] { position: static; float: none; display: table-column }
table td[class*="col-"],table th[class*="col-"] { float: none; display: table-cell }
.table>thead>tr>.active,.table>tbody>tr>.active,.table>tfoot>tr>.active,.table>thead>.active>td,.table>tbody>.active>td,.table>tfoot>.active>td,.table>thead>.active>th,.table>tbody>.active>th,.table>tfoot>.active>th { background-color: #f5f5f5 }
.table-hover>tbody>tr>.active:hover,.table-hover>tbody>.active:hover>td,.table-hover>tbody>.active:hover>th { background-color: #e8e8e8 }
.table>thead>tr>.success,.table>tbody>tr>.success,.table>tfoot>tr>.success,.table>thead>.success>td,.table>tbody>.success>td,.table>tfoot>.success>td,.table>thead>.success>th,.table>tbody>.success>th,.table>tfoot>.success>th { background-color: #dff0d8 }
.table-hover>tbody>tr>.success:hover,.table-hover>tbody>.success:hover>td,.table-hover>tbody>.success:hover>th { background-color: #d0e9c6 }
.table>thead>tr>.danger,.table>tbody>tr>.danger,.table>tfoot>tr>.danger,.table>thead>.danger>td,.table>tbody>.danger>td,.table>tfoot>.danger>td,.table>thead>.danger>th,.table>tbody>.danger>th,.table>tfoot>.danger>th { background-color: rgba(232,76,61,0.1) }
.table-hover>tbody>tr>.danger:hover,.table-hover>tbody>.danger:hover>td,.table-hover>tbody>.danger:hover>th { background-color: rgba(229,55,38,0.1) }
.table>thead>tr>.warning,.table>tbody>tr>.warning,.table>tfoot>tr>.warning,.table>thead>.warning>td,.table>tbody>.warning>td,.table>tfoot>.warning>td,.table>thead>.warning>th,.table>tbody>.warning>th,.table>tfoot>.warning>th { background-color: rgba(255,209,0,0.12) }
.table-hover>tbody>tr>.warning:hover,.table-hover>tbody>.warning:hover>td,.table-hover>tbody>.warning:hover>th { background-color: rgba(230,188,0,0.12) }
fieldset { padding: 0; margin: 0; border: 0 }
legend { display: block; width: 100%; padding: 0; margin-bottom: 21px; font-size: 22.5px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5 }
label { display: inline-block; margin-bottom: 5px; font-weight: bold }
input[type="search"] { }
input[type="radio"],input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px ; line-height: normal }
input[type="file"] { display: block }
select[multiple],select[size] { height: auto }
select optgroup { font-size: inherit; font-style: inherit; font-family: inherit }
input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus { outline: 5px auto -webkit-focus-ring-color }
input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button { height: auto }
output { display: block; padding-top: 7px; font-size: 15px; line-height: 1.45; color: #2c3f51; vertical-align: middle }
.form-control { display: block; width: 100%; height: 42px; padding: 6px 12px; font-size: 15px; line-height: 1.45; color: #2c3f51; vertical-align: middle; background-color: #fff; background-image: none; border: 1px solid #dee6ed }
.form-control:focus { border-color: #66afe9; outline: 0 }
.form-control:focus { border-color: #dee6ed; outline: 0 }
.form-control:focus { border-color: rgba(25,128,230,0.5); outline: 0 }
.form-control:-moz-placeholder { color: #d5dfe9 }
.form-control::-moz-placeholder { color: #d5dfe9; opacity: 1 }
.form-control:-ms-input-placeholder { color: #d5dfe9 }
.form-control::-webkit-input-placeholder { color: #d5dfe9 }
.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control { cursor: not-allowed; background-color: none }
textarea.form-control { height: auto }
.form-group { margin-bottom: 15px }
.radio,.checkbox { display: block; min-height: 21px; margin-top: 10px; margin-bottom: 10px; padding-left: 20px; vertical-align: middle }
.radio label,.checkbox label { display: inline; margin-bottom: 0; font-weight: normal; cursor: pointer }
.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"] { float: left; margin-left: -20px }
.radio+.radio,.checkbox+.checkbox { margin-top: -5px }
.radio-inline,.checkbox-inline { display: inline-block; padding-left: 20px; margin-bottom: 0; vertical-align: middle; font-weight: normal; cursor: pointer }
.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline { margin-top: 0; margin-left: 10px }
input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline { cursor: not-allowed }
.input-sm { height: 31px; padding: 5px 10px; font-size: 13px; line-height: 1.5 }
select.input-sm { height: 31px; line-height: 31px }
textarea.input-sm { height: auto }
.input-lg { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33 }
select.input-lg { height: 48px; line-height: 48px }
textarea.input-lg { height: auto }
.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline { color: #b89600 }
.has-warning .form-control { border-color: #b89600 }
.has-warning .form-control:focus { border-color: #856d00 }
.has-warning .input-group-addon { color: #b89600; border-color: #b89600; background-color: rgba(255,209,0,0.12) }
.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline { color: #d82a1a }
.has-error .form-control { border-color: #d82a1a }
.has-error .form-control:focus { border-color: #ab2114 }
.has-error .input-group-addon { color: #d82a1a; border-color: #d82a1a; background-color: rgba(232,76,61,0.1) }
.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline { color: #3c763d }
.has-success .form-control { border-color: #3c763d }
.has-success .form-control:focus { border-color: #2b542c }
.has-success .input-group-addon { color: #3c763d; border-color: #3c763d; background-color: #dff0d8 }
.form-control-static { margin-bottom: 0 }
.help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #587ea4 }
.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline { margin-top: 0; margin-bottom: 0; padding-top: 7px }
.form-horizontal .radio,.form-horizontal .checkbox { min-height: 28px }
.form-horizontal .form-group { margin-left: -15px; margin-right: -15px }
.form-horizontal .form-group::before,.form-horizontal .form-group::after { content: " "; display: table }
.form-horizontal .form-group::after { clear: both }
.form-horizontal .form-group::before,.form-horizontal .form-group::after { content: " "; display: table }
.form-horizontal .form-group::after { clear: both }
.form-horizontal .form-control-static { padding-top: 7px }
.btn { display: inline-block; margin-bottom: 0; font-weight: normal; text-align: center; vertical-align: middle; cursor: pointer; background-image: none; border: 1px solid transparent; white-space: nowrap; padding: 6px 12px; font-size: 15px; line-height: 1.45 }
.btn:focus { outline: 5px auto -webkit-focus-ring-color }
.btn:hover,.btn:focus { color: #425e7b; text-decoration: none }
.btn:active,.btn.active { outline: 0; background-image: none }
.btn.disabled,.btn[disabled],fieldset[disabled] .btn { cursor: not-allowed; opacity: .65 }
.btn-default { color: #425e7b; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default { color: #425e7b; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default { background-image: none }
.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active { background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-default .badge { color: rgba(0,0,0,0); background-color: #fff }
.btn-primary { color: #425e7b; background-color: #e4ebf1; border-color: rgba(0,128,255,0.05) }
.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary { color: #425e7b; background-color: #cad6e2; border-color: rgba(0,97,194,0.05) }
.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary { background-image: none }
.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active { background-color: #e4ebf1; border-color: rgba(0,128,255,0.05) }
.btn-primary .badge { color: #e4ebf1; background-color: #fff }
.btn-warning { color: #fff; background-color: #f0ad4e; border-color: #eea236 }
.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning { color: #fff; background-color: #ed9c28; border-color: #d58512 }
.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning { background-image: none }
.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active { background-color: #f0ad4e; border-color: #eea236 }
.btn-warning .badge { color: #f0ad4e; background-color: #fff }
.btn-danger { color: #fff; background-color: #d9534f; border-color: #d43f3a }
.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger { color: #fff; background-color: #d2322d; border-color: #ac2925 }
.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger { background-image: none }
.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active { background-color: #d9534f; border-color: #d43f3a }
.btn-danger .badge { color: #d9534f; background-color: #fff }
.btn-success { color: #364d63; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success { color: #364d63; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success { background-image: none }
.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active { background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-success .badge { color: rgba(0,0,0,0); background-color: #fff }
.btn-info { color: rgba(102,128,153,0.35); background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info { color: rgba(102,128,153,0.35); background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info { background-image: none }
.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active { background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.btn-info .badge { color: rgba(0,0,0,0); background-color: #fff }
.btn-link { color: #1980e6; font-weight: normal; cursor: pointer }
.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link { background-color: transparent }
.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active { border-color: transparent }
.btn-link:hover,.btn-link:focus { color: #0f4d8a; text-decoration: underline; background-color: transparent }
.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus { color: #999; text-decoration: none }
.btn-lg { padding: 10px 16px; font-size: 19px; line-height: 1.33 }
.btn-sm { padding: 5px 10px; font-size: 13px; line-height: 1.5 }
.btn-xs { padding: 1px 5px; font-size: 13px; line-height: 1.5 }
.btn-block { display: block; width: 100%; padding-left: 0; padding-right: 0 }
.btn-block+.btn-block { margin-top: 5px }
input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block { width: 100% }
.fade { opacity: 0 }
.fade.in { opacity: 1 }
.collapse { display: none }
.collapse.in { display: block }
.collapsing { position: relative; height: 0; overflow: hidden }
.glyphicon { position: relative; top: 1px; display: inline-block; font-family: "Glyphicons Halflings"; font-style: normal; font-weight: normal; line-height: 1 }
.glyphicon:empty { width: 1em }
.glyphicon-asterisk::before { content: "*" }
.glyphicon-plus::before { content: "+" }
.glyphicon-euro::before { content: "€" }
.glyphicon-minus::before { content: "?" }
.glyphicon-cloud::before { content: "?" }
.glyphicon-envelope::before { content: "?" }
.glyphicon-pencil::before { content: "?" }
.glyphicon-glass::before { content: "" }
.glyphicon-music::before { content: "" }
.glyphicon-search::before { content: "" }
.glyphicon-heart::before { content: "" }
.glyphicon-star::before { content: "" }
.glyphicon-star-empty::before { content: "" }
.glyphicon-user::before { content: "" }
.glyphicon-film::before { content: "" }
.glyphicon-th-large::before { content: "" }
.glyphicon-th::before { content: "" }
.glyphicon-th-list::before { content: "" }
.glyphicon-ok::before { content: "" }
.glyphicon-remove::before { content: "" }
.glyphicon-zoom-in::before { content: "" }
.glyphicon-zoom-out::before { content: "" }
.glyphicon-off::before { content: "" }
.glyphicon-signal::before { content: "" }
.glyphicon-cog::before { content: "" }
.glyphicon-trash::before { content: "" }
.glyphicon-home::before { content: "" }
.glyphicon-file::before { content: "" }
.glyphicon-time::before { content: "" }
.glyphicon-road::before { content: "" }
.glyphicon-download-alt::before { content: "" }
.glyphicon-download::before { content: "" }
.glyphicon-upload::before { content: "" }
.glyphicon-inbox::before { content: "" }
.glyphicon-play-circle::before { content: "" }
.glyphicon-repeat::before { content: "" }
.glyphicon-refresh::before { content: "" }
.glyphicon-list-alt::before { content: "" }
.glyphicon-lock::before { content: "" }
.glyphicon-flag::before { content: "" }
.glyphicon-headphones::before { content: "" }
.glyphicon-volume-off::before { content: "" }
.glyphicon-volume-down::before { content: "" }
.glyphicon-volume-up::before { content: "" }
.glyphicon-qrcode::before { content: "" }
.glyphicon-barcode::before { content: "" }
.glyphicon-tag::before { content: "" }
.glyphicon-tags::before { content: "" }
.glyphicon-book::before { content: "" }
.glyphicon-bookmark::before { content: "" }
.glyphicon-print::before { content: "" }
.glyphicon-camera::before { content: "" }
.glyphicon-font::before { content: "" }
.glyphicon-bold::before { content: "" }
.glyphicon-italic::before { content: "" }
.glyphicon-text-height::before { content: "" }
.glyphicon-text-width::before { content: "" }
.glyphicon-align-left::before { content: "" }
.glyphicon-align-center::before { content: "" }
.glyphicon-align-right::before { content: "" }
.glyphicon-align-justify::before { content: "" }
.glyphicon-list::before { content: "" }
.glyphicon-indent-left::before { content: "" }
.glyphicon-indent-right::before { content: "" }
.glyphicon-facetime-video::before { content: "" }
.glyphicon-picture::before { content: "" }
.glyphicon-map-marker::before { content: "" }
.glyphicon-adjust::before { content: "" }
.glyphicon-tint::before { content: "" }
.glyphicon-edit::before { content: "" }
.glyphicon-share::before { content: "" }
.glyphicon-check::before { content: "" }
.glyphicon-move::before { content: "" }
.glyphicon-step-backward::before { content: "" }
.glyphicon-fast-backward::before { content: "" }
.glyphicon-backward::before { content: "" }
.glyphicon-play::before { content: "" }
.glyphicon-pause::before { content: "" }
.glyphicon-stop::before { content: "" }
.glyphicon-forward::before { content: "" }
.glyphicon-fast-forward::before { content: "" }
.glyphicon-step-forward::before { content: "" }
.glyphicon-eject::before { content: "" }
.glyphicon-chevron-left::before { content: "" }
.glyphicon-chevron-right::before { content: "" }
.glyphicon-plus-sign::before { content: "" }
.glyphicon-minus-sign::before { content: "" }
.glyphicon-remove-sign::before { content: "" }
.glyphicon-ok-sign::before { content: "" }
.glyphicon-question-sign::before { content: "" }
.glyphicon-info-sign::before { content: "" }
.glyphicon-screenshot::before { content: "" }
.glyphicon-remove-circle::before { content: "" }
.glyphicon-ok-circle::before { content: "" }
.glyphicon-ban-circle::before { content: "" }
.glyphicon-arrow-left::before { content: "" }
.glyphicon-arrow-right::before { content: "" }
.glyphicon-arrow-up::before { content: "" }
.glyphicon-arrow-down::before { content: "" }
.glyphicon-share-alt::before { content: "" }
.glyphicon-resize-full::before { content: "" }
.glyphicon-resize-small::before { content: "" }
.glyphicon-exclamation-sign::before { content: "" }
.glyphicon-gift::before { content: "" }
.glyphicon-leaf::before { content: "" }
.glyphicon-fire::before { content: "" }
.glyphicon-eye-open::before { content: "" }
.glyphicon-eye-close::before { content: "" }
.glyphicon-warning-sign::before { content: "" }
.glyphicon-plane::before { content: "" }
.glyphicon-calendar::before { content: "" }
.glyphicon-random::before { content: "" }
.glyphicon-comment::before { content: "" }
.glyphicon-magnet::before { content: "" }
.glyphicon-chevron-up::before { content: "" }
.glyphicon-chevron-down::before { content: "" }
.glyphicon-retweet::before { content: "" }
.glyphicon-shopping-cart::before { content: "" }
.glyphicon-folder-close::before { content: "" }
.glyphicon-folder-open::before { content: "" }
.glyphicon-resize-vertical::before { content: "" }
.glyphicon-resize-horizontal::before { content: "" }
.glyphicon-hdd::before { content: "" }
.glyphicon-bullhorn::before { content: "" }
.glyphicon-bell::before { content: "" }
.glyphicon-certificate::before { content: "" }
.glyphicon-thumbs-up::before { content: "" }
.glyphicon-thumbs-down::before { content: "" }
.glyphicon-hand-right::before { content: "" }
.glyphicon-hand-left::before { content: "" }
.glyphicon-hand-up::before { content: "" }
.glyphicon-hand-down::before { content: "" }
.glyphicon-circle-arrow-right::before { content: "" }
.glyphicon-circle-arrow-left::before { content: "" }
.glyphicon-circle-arrow-up::before { content: "" }
.glyphicon-circle-arrow-down::before { content: "" }
.glyphicon-globe::before { content: "" }
.glyphicon-wrench::before { content: "" }
.glyphicon-tasks::before { content: "" }
.glyphicon-filter::before { content: "" }
.glyphicon-briefcase::before { content: "" }
.glyphicon-fullscreen::before { content: "" }
.glyphicon-dashboard::before { content: "" }
.glyphicon-paperclip::before { content: "" }
.glyphicon-heart-empty::before { content: "" }
.glyphicon-link::before { content: "" }
.glyphicon-phone::before { content: "" }
.glyphicon-pushpin::before { content: "" }
.glyphicon-usd::before { content: "" }
.glyphicon-gbp::before { content: "" }
.glyphicon-sort::before { content: "" }
.glyphicon-sort-by-alphabet::before { content: "" }
.glyphicon-sort-by-alphabet-alt::before { content: "" }
.glyphicon-sort-by-order::before { content: "" }
.glyphicon-sort-by-order-alt::before { content: "" }
.glyphicon-sort-by-attributes::before { content: "" }
.glyphicon-sort-by-attributes-alt::before { content: "" }
.glyphicon-unchecked::before { content: "" }
.glyphicon-expand::before { content: "" }
.glyphicon-collapse-down::before { content: "" }
.glyphicon-collapse-up::before { content: "" }
.glyphicon-log-in::before { content: "" }
.glyphicon-flash::before { content: "" }
.glyphicon-log-out::before { content: "" }
.glyphicon-new-window::before { content: "" }
.glyphicon-record::before { content: "" }
.glyphicon-save::before { content: "" }
.glyphicon-open::before { content: "" }
.glyphicon-saved::before { content: "" }
.glyphicon-import::before { content: "" }
.glyphicon-export::before { content: "" }
.glyphicon-send::before { content: "" }
.glyphicon-floppy-disk::before { content: "" }
.glyphicon-floppy-saved::before { content: "" }
.glyphicon-floppy-remove::before { content: "" }
.glyphicon-floppy-save::before { content: "" }
.glyphicon-floppy-open::before { content: "" }
.glyphicon-credit-card::before { content: "" }
.glyphicon-transfer::before { content: "" }
.glyphicon-cutlery::before { content: "" }
.glyphicon-header::before { content: "" }
.glyphicon-compressed::before { content: "" }
.glyphicon-earphone::before { content: "" }
.glyphicon-phone-alt::before { content: "" }
.glyphicon-tower::before { content: "" }
.glyphicon-stats::before { content: "" }
.glyphicon-sd-video::before { content: "" }
.glyphicon-hd-video::before { content: "" }
.glyphicon-subtitles::before { content: "" }
.glyphicon-sound-stereo::before { content: "" }
.glyphicon-sound-dolby::before { content: "" }
.glyphicon-sound-5-1::before { content: "" }
.glyphicon-sound-6-1::before { content: "" }
.glyphicon-sound-7-1::before { content: "" }
.glyphicon-copyright-mark::before { content: "" }
.glyphicon-registration-mark::before { content: "" }
.glyphicon-cloud-download::before { content: "" }
.glyphicon-cloud-upload::before { content: "" }
.glyphicon-tree-conifer::before { content: "" }
.glyphicon-tree-deciduous::before { content: "" }
.caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent }
.dropdown { position: relative }
.dropdown-toggle:focus { outline: 0 }
.dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; list-style: none; font-size: 15px; background-color: #fff; border: 1px solid #dee6ed }
.dropdown-menu.pull-right { right: 0; left: auto }
.dropdown-menu .divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: #dee6ed }
.dropdown-menu>li>a { display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.45; color: #2c3f51; white-space: nowrap }
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus { text-decoration: none; color: #2d4053; background-color: rgba(102,128,153,0.04) }
.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus { color: #fff; text-decoration: none; outline: 0; background-color: #428bca }
.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus { color: #d5dfe9 }
.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus { text-decoration: none; background-color: transparent; background-image: none; cursor: not-allowed }
.open>.dropdown-menu { display: block }
.open>a { outline: 0 }
.dropdown-header { display: block; padding: 3px 20px; font-size: 13px; line-height: 1.45; color: rgba(129,158,187,0.6) }
.dropdown-backdrop { position: fixed; left: 0; right: 0; bottom: 0; top: 0; z-index: 990 }
.pull-right>.dropdown-menu { right: 0; left: auto }
.dropup .caret,.navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid; content: "" }
.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px }
.btn-group,.btn-group-vertical { position: relative; display: inline-block; vertical-align: middle }
.btn-group>.btn,.btn-group-vertical>.btn { position: relative; float: left }
.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active { z-index: 2 }
.btn-group>.btn:focus,.btn-group-vertical>.btn:focus { outline: none }
.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::before,.btn-toolbar::after { content: " "; display: table }
.btn-toolbar::after { clear: both }
.btn-toolbar::before,.btn-toolbar::after { content: " "; display: table }
.btn-toolbar::after { clear: both }
.btn-toolbar .btn-group { float: left }
.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group { margin-left: 5px }
.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { }
.btn-group>.btn:first-child { margin-left: 0 }
.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { }
.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child) { }
.btn-group>.btn-group { float: left }
.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { }
.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle { }
.btn-group>.btn-group:last-child>.btn:first-child { }
.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle { outline: 0 }
.btn-group-xs>.btn { padding: 1px 5px; font-size: 13px; line-height: 1.5 }
.btn-group-sm>.btn { padding: 5px 10px; font-size: 13px; line-height: 1.5 }
.btn-group-lg>.btn { padding: 10px 16px; font-size: 19px; line-height: 1.33 }
.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 { }
.btn-group.open .dropdown-toggle.btn-link { }
.btn .caret { margin-left: 0 }
.btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0 }
.dropup .btn-lg .caret { border-width: 0 5px 5px }
.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn { display: block; float: none; width: 100%; max-width: 100% }
.btn-group-vertical>.btn-group::before,.btn-group-vertical>.btn-group::after { content: " "; display: table }
.btn-group-vertical>.btn-group::after { clear: both }
.btn-group-vertical>.btn-group::before,.btn-group-vertical>.btn-group::after { content: " "; display: table }
.btn-group-vertical>.btn-group::after { clear: both }
.btn-group-vertical>.btn-group>.btn { float: none }
.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group { margin-top: -1px; margin-left: 0 }
.btn-group-vertical>.btn:not(:first-child):not(:last-child) { }
.btn-group-vertical>.btn:first-child:not(:last-child) { }
.btn-group-vertical>.btn:last-child:not(:first-child) { }
.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { }
.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle { }
.btn-group-vertical>.btn-group:last-child>.btn:first-child { }
.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% }
[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"] { display: 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 { width: 100%; margin-bottom: 0 }
.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn { height: 48px; padding: 10px 16px; font-size: 19px; line-height: 1.33 }
select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn { height: 48px; line-height: 48px }
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: 31px; padding: 5px 10px; font-size: 13px; line-height: 1.5 }
select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn { height: 31px; line-height: 31px }
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-addon,.input-group-btn,.input-group .form-control { display: table-cell }
.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child) { }
.input-group-addon,.input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle }
.input-group-addon { padding: 6px 12px; font-size: 15px; font-weight: normal; line-height: 1; color: #2c3f51; text-align: center; background-color: none; border: 1px solid #dee6ed }
.input-group-addon.input-sm { padding: 5px 10px; font-size: 13px }
.input-group-addon.input-lg { padding: 10px 16px; font-size: 19px }
.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"] { margin-top: 0 }
.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { }
.input-group-addon:first-child { border-right: 0 }
.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child) { }
.input-group-addon:last-child { border-left: 0 }
.input-group-btn { position: relative; white-space: nowrap }
.input-group-btn:first-child>.btn { margin-right: -1px }
.input-group-btn:last-child>.btn { margin-left: -1px }
.input-group-btn>.btn { position: relative }
.input-group-btn>.btn+.btn { margin-left: -4px }
.input-group-btn>.btn:hover,.input-group-btn>.btn:active { z-index: 2 }
.nav { margin-bottom: 0; padding-left: 0; list-style: none }
.nav::before,.nav::after { content: " "; display: table }
.nav::after { clear: both }
.nav::before,.nav::after { content: " "; display: table }
.nav::after { clear: both }
.nav>li { position: relative; display: block }
.nav>li>a { position: relative; display: block; padding: 10px 15px }
.nav>li>a:hover,.nav>li>a:focus { text-decoration: none; background-color: rgba(102,128,153,0.04) }
.nav>li.disabled>a { color: #d5dfe9 }
.nav>li.disabled>a:hover,.nav>li.disabled>a:focus { color: #d5dfe9; text-decoration: none; background-color: transparent; cursor: not-allowed }
.nav .open>a,.nav .open>a:hover,.nav .open>a:focus { background-color: rgba(102,128,153,0.04); border-color: #1980e6 }
.nav .nav-divider { height: 1px; margin: 9.5px 0; overflow: hidden; background-color: #e5e5e5 }
.nav>li>a>img { max-width: none }
.nav-tabs { border-bottom: 1px solid rgba(0,0,0,0) }
.nav-tabs>li { float: left; margin-bottom: -1px }
.nav-tabs>li>a { margin-right: 2px; line-height: 1.45; border: 1px solid transparent }
.nav-tabs>li>a:hover { border-color: rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) }
.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus { color: #555; background-color: none; 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 }
.nav-tabs.nav-justified>.dropdown .dropdown-menu { top: auto; left: auto }
.nav-tabs.nav-justified>li>a { margin-right: 0 }
.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus { border: 1px solid #ddd }
.nav-pills>li { float: left }
.nav-pills>li>a { }
.nav-pills>li+li { margin-left: 2px }
.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus { color: #fff; background-color: #428bca }
.nav-stacked>li { float: none }
.nav-stacked>li+li { margin-top: 2px; margin-left: 0 }
.nav-justified { width: 100% }
.nav-justified>li { float: none }
.nav-justified>li>a { text-align: center; margin-bottom: 5px }
.nav-justified>.dropdown .dropdown-menu { top: auto; left: auto }
.nav-tabs-justified { border-bottom: 0 }
.nav-tabs-justified>li>a { margin-right: 0 }
.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus { border: 1px solid #ddd }
.tab-content>.tab-pane { display: none }
.tab-content>.active { display: block }
.nav-tabs .dropdown-menu { margin-top: -1px }
.navbar { position: relative; min-height: 50px; margin-bottom: 21px; border: 1px solid transparent }
.navbar::before,.navbar::after { content: " "; display: table }
.navbar::after { clear: both }
.navbar::before,.navbar::after { content: " "; display: table }
.navbar::after { clear: both }
.navbar-header::before,.navbar-header::after { content: " "; display: table }
.navbar-header::after { clear: both }
.navbar-header::before,.navbar-header::after { content: " "; display: table }
.navbar-header::after { clear: both }
.navbar-collapse { max-height: 340px; padding-right: 15px; padding-left: 15px; border-top: 1px solid transparent }
.navbar-collapse::before,.navbar-collapse::after { content: " "; display: table }
.navbar-collapse::after { clear: both }
.navbar-collapse::before,.navbar-collapse::after { content: " "; display: table }
.navbar-collapse::after { clear: both }
.navbar-collapse.in { }
.container>.navbar-header,.container>.navbar-collapse { margin-right: -15px; margin-left: -15px }
.navbar-static-top { z-index: 1000; border-width: 0 0 1px }
.navbar-fixed-top,.navbar-fixed-bottom { 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: 14.5px 15px; font-size: 19px; line-height: 21px }
.navbar-brand:hover,.navbar-brand:focus { text-decoration: none }
.navbar-toggle { position: relative; float: right; margin-right: 15px; padding: 9px 10px; margin-top: 8px; margin-bottom: 8px; background-color: transparent; background-image: none; border: 1px solid transparent }
.navbar-toggle .icon-bar { display: block; width: 22px; height: 2px }
.navbar-toggle .icon-bar+.icon-bar { margin-top: 4px }
.navbar-nav { margin: 7.25px -15px }
.navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 21px }
.navbar-form { margin-left: -15px; margin-right: -15px; padding: 10px 15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; margin-top: 4px; margin-bottom: 4px }
.navbar-form * { float: none }
.navbar-nav>li>.dropdown-menu { margin-top: 0 }
.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { }
.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right { left: auto; right: 0 }
.navbar-btn { margin-top: 4px; margin-bottom: 4px }
.navbar-btn.btn-sm { margin-top: 9.5px; margin-bottom: 9.5px }
.navbar-btn.btn-xs { margin-top: 14px; margin-bottom: 14px }
.navbar-text { margin-top: 14.5px; margin-bottom: 14.5px }
.navbar-default { background-color: #e4ebf1; border-color: #cfdae5 }
.navbar-default .navbar-brand { color: #777 }
.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent }
.navbar-default .navbar-text { color: #777 }
.navbar-default .navbar-nav>li>a { color: #777 }
.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus { color: #333; background-color: transparent }
.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus { color: #555; background-color: #cfdae5 }
.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus { color: #ccc; background-color: transparent }
.navbar-default .navbar-toggle { border-color: #ddd }
.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus { background-color: #ddd }
.navbar-default .navbar-toggle .icon-bar { background-color: #ccc }
.navbar-default .navbar-collapse,.navbar-default .navbar-form { border-color: #cfdae5 }
.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus { background-color: #cfdae5; color: #555 }
.navbar-default .navbar-link { color: #777 }
.navbar-default .navbar-link:hover { color: #333 }
.navbar-inverse { background-color: #222; border-color: #080808 }
.navbar-inverse .navbar-brand { color: #999 }
.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent }
.navbar-inverse .navbar-text { color: #999 }
.navbar-inverse .navbar-nav>li>a { color: #999 }
.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus { color: #fff; background-color: transparent }
.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus { color: #fff; background-color: #080808 }
.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus { color: #444; background-color: transparent }
.navbar-inverse .navbar-toggle { border-color: #333 }
.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus { background-color: #333 }
.navbar-inverse .navbar-toggle .icon-bar { background-color: #fff }
.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form { border-color: #101010 }
.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus { background-color: #080808; color: #fff }
.navbar-inverse .navbar-link { color: #999 }
.navbar-inverse .navbar-link:hover { color: #fff }
.breadcrumb { padding: 8px 15px; margin-bottom: 21px; list-style: none; background-color: #f5f5f5 }
.breadcrumb>li { display: inline-block }
.breadcrumb>li+li::before { content: "/?"; padding: 0 5px; color: #ccc }
.breadcrumb>.active { color: #999 }
.pagination { display: inline-block; padding-left: 0; margin: 21px 0 }
.pagination>li { display: inline }
.pagination>li>a,.pagination>li>span { position: relative; float: left; padding: 6px 12px; line-height: 1.45; text-decoration: none; background-color: #fff; border: 1px solid #ddd; margin-left: -1px }
.pagination>li:first-child>a,.pagination>li:first-child>span { margin-left: 0 }
.pagination>li:last-child>a,.pagination>li:last-child>span { }
.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus { background-color: none }
.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus { z-index: 2; color: #fff; background-color: #428bca; border-color: #428bca; cursor: default }
.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus { color: #999; background-color: #fff; border-color: #ddd; cursor: not-allowed }
.pagination-lg>li>a,.pagination-lg>li>span { padding: 10px 16px; font-size: 19px }
.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span { }
.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span { }
.pagination-sm>li>a,.pagination-sm>li>span { padding: 5px 10px; font-size: 13px }
.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span { }
.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span { }
.pager { padding-left: 0; margin: 21px 0; list-style: none; text-align: center }
.pager::before,.pager::after { content: " "; display: table }
.pager::after { clear: both }
.pager::before,.pager::after { content: " "; display: table }
.pager::after { clear: both }
.pager li { display: inline }
.pager li>a,.pager li>span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd }
.pager li>a:hover,.pager li>a:focus { text-decoration: none; background-color: none }
.pager .next>a,.pager .next>span { float: right }
.pager .previous>a,.pager .previous>span { float: left }
.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span { color: #999; background-color: #fff; cursor: not-allowed }
.label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline }
.label[href]:hover,.label[href]:focus { color: #fff; text-decoration: none; cursor: pointer }
.label:empty { display: none }
.btn .label { position: relative; top: -1px }
.label-default { background-color: #999 }
.label-default[href]:hover,.label-default[href]:focus { background-color: #808080 }
.label-primary { background-color: #428bca }
.label-primary[href]:hover,.label-primary[href]:focus { background-color: #3071a9 }
.label-success { background-color: #5cb85c }
.label-success[href]:hover,.label-success[href]:focus { background-color: #449d44 }
.label-info { background-color: #5bc0de }
.label-info[href]:hover,.label-info[href]:focus { background-color: #31b0d5 }
.label-warning { background-color: #ebc000 }
.label-warning[href]:hover,.label-warning[href]:focus { background-color: #b89600 }
.label-danger { background-color: #e63b2b }
.label-danger[href]:hover,.label-danger[href]:focus { background-color: #c62717 }
.badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 13px; font-weight: bold; color: #fff; line-height: 1; vertical-align: baseline; white-space: nowrap; text-align: center; background-color: #999 }
.badge:empty { display: none }
.btn .badge { position: relative; top: -1px }
a.badge:hover,a.badge:focus { color: #fff; text-decoration: none; cursor: pointer }
a.list-group-item.active>.badge,.nav-pills>.active>a>.badge { color: #1980e6; background-color: #fff }
.nav-pills>li>a>.badge { margin-left: 3px }
.jumbotron { padding: 30px; margin-bottom: 30px; font-size: 23px; font-weight: 200; line-height: 2.175; color: inherit; background-color: none }
.jumbotron h1,.jumbotron .h1 { line-height: 1; color: inherit }
.jumbotron p { line-height: 1.4 }
.container .jumbotron { }
.jumbotron .container { max-width: 100% }
.thumbnail { display: block; padding: 4px; margin-bottom: 21px; line-height: 1.45; background-color: none; border: 1px solid #ddd }
.thumbnail>img,.thumbnail a>img { display: block; max-width: 100%; height: auto; margin-left: auto; margin-right: auto }
a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active { border-color: #1980e6 }
.thumbnail .caption { padding: 9px; color: #2c3f51 }
.alert { padding: 15px; margin-bottom: 21px; border: 1px solid transparent }
.alert h4 { margin-top: 0; color: inherit }
.alert .alert-link { font-weight: bold }
.alert>p,.alert>ul { margin-bottom: 0 }
.alert>p+p { margin-top: 5px }
.alert-dismissable { padding-right: 35px }
.alert-dismissable .close { position: relative; top: -2px; right: -21px; color: inherit }
.alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #3c763d }
.alert-success hr { border-top-color: #c9e2b3 }
.alert-success .alert-link { color: #2b542c }
.alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f }
.alert-info hr { border-top-color: #a6e1ec }
.alert-info .alert-link { color: #245269 }
.alert-warning { background-color: rgba(255,209,0,0.12); border-color: rgba(255,209,0,0.24); color: #b89600 }
.alert-warning hr { border-top-color: rgba(230,188,0,0.24) }
.alert-warning .alert-link { color: #856d00 }
.alert-danger { background-color: rgba(232,76,61,0.1); border-color: rgba(232,76,61,0.15); color: #d82a1a }
.alert-danger hr { border-top-color: rgba(229,55,38,0.15) }
.alert-danger .alert-link { color: #ab2114 }
.progress { overflow: hidden; height: 21px; margin-bottom: 21px; background-color: #f5f5f5 }
.progress-bar { float: left; width: 0; height: 100%; font-size: 13px; line-height: 21px; color: #fff; text-align: center; background-color: #428bca }
.progress-striped .progress-bar { background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent) }
.progress.active .progress-bar { }
.progress-bar-success { background-color: #5cb85c }
.progress-striped .progress-bar-success { background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent) }
.progress-bar-info { background-color: #5bc0de }
.progress-striped .progress-bar-info { background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent) }
.progress-bar-warning { background-color: #f0ad4e }
.progress-striped .progress-bar-warning { background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent) }
.progress-bar-danger { background-color: #d9534f }
.progress-striped .progress-bar-danger { background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent) }
.media,.media-body { overflow: hidden }
.media,.media .media { margin-top: 15px }
.media:first-child { margin-top: 0 }
.media-object { display: block }
.media-heading { margin: 0 0 5px }
.media>.pull-left { margin-right: 10px }
.media>.pull-right { margin-left: 10px }
.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: #f6f7f9; border: 1px solid rgba(0,0,0,0) }
.list-group-item:first-child { }
.list-group-item:last-child { margin-bottom: 0 }
.list-group-item>.badge { float: right }
.list-group-item>.badge+.badge { margin-right: 5px }
a.list-group-item { color: #eee }
a.list-group-item .list-group-item-heading { color: #333 }
a.list-group-item:hover,a.list-group-item:focus { text-decoration: none; background-color: #4b5666 }
a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus { z-index: 2; color: #2d4053; background-color: #e4ebf1; border-color: rgba(0,128,255,0.05) }
a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading { color: inherit }
a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text { color: #fff }
.list-group-item-heading { margin-top: 0; margin-bottom: 5px }
.list-group-item-text { margin-bottom: 0; line-height: 1.3 }
.panel { margin-bottom: 21px; background-color: #fff; border: 1px solid transparent }
.panel-body { padding: 15px }
.panel-body::before,.panel-body::after { content: " "; display: table }
.panel-body::after { clear: both }
.panel-body::before,.panel-body::after { content: " "; display: table }
.panel-body::after { clear: both }
.panel>.list-group { margin-bottom: 0 }
.panel>.list-group .list-group-item { border-width: 1px 0 }
.panel>.list-group .list-group-item:first-child { }
.panel>.list-group .list-group-item:last-child { border-bottom: 0 }
.panel-heading+.list-group .list-group-item:first-child { border-top-width: 0 }
.panel>.table,.panel>.table-responsive>.table { margin-bottom: 0 }
.panel>.panel-body+.table,.panel>.panel-body+.table-responsive { border-top: 1px solid #ddd }
.panel>.table>tbody:first-child th,.panel>.table>tbody:first-child td { border-top: 0 }
.panel>.table-bordered,.panel>.table-responsive>.table-bordered { border: 0 }
.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child { border-left: 0 }
.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child { border-right: 0 }
.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td { border-bottom: 0 }
.panel>.table-responsive { border: 0; margin-bottom: 0 }
.panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent }
.panel-heading>.dropdown .dropdown-toggle { color: inherit }
.panel-title { margin-top: 0; margin-bottom: 0; font-size: 17px; color: inherit }
.panel-title>a { color: inherit }
.panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #ddd }
.panel-group .panel { margin-bottom: 0; overflow: hidden }
.panel-group .panel+.panel { margin-top: 5px }
.panel-group .panel-heading { border-bottom: 0 }
.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-footer+.panel-collapse .panel-body { border-bottom-color: #ddd }
.panel-primary { border-color: #428bca }
.panel-primary>.panel-heading { color: #fff; background-color: #428bca; border-color: #428bca }
.panel-primary>.panel-heading+.panel-collapse .panel-body { border-top-color: #428bca }
.panel-primary>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #428bca }
.panel-success { border-color: #d6e9c6 }
.panel-success>.panel-heading { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6 }
.panel-success>.panel-heading+.panel-collapse .panel-body { border-top-color: #d6e9c6 }
.panel-success>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #d6e9c6 }
.panel-warning { border-color: rgba(255,209,0,0.24) }
.panel-warning>.panel-heading { color: #b89600; background-color: rgba(255,209,0,0.12); border-color: rgba(255,209,0,0.24) }
.panel-warning>.panel-heading+.panel-collapse .panel-body { border-top-color: rgba(255,209,0,0.24) }
.panel-warning>.panel-footer+.panel-collapse .panel-body { border-bottom-color: rgba(255,209,0,0.24) }
.panel-danger { border-color: rgba(232,76,61,0.15) }
.panel-danger>.panel-heading { color: #d82a1a; background-color: rgba(232,76,61,0.1); border-color: rgba(232,76,61,0.15) }
.panel-danger>.panel-heading+.panel-collapse .panel-body { border-top-color: rgba(232,76,61,0.15) }
.panel-danger>.panel-footer+.panel-collapse .panel-body { border-bottom-color: rgba(232,76,61,0.15) }
.panel-info { border-color: #bce8f1 }
.panel-info>.panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1 }
.panel-info>.panel-heading+.panel-collapse .panel-body { border-top-color: #bce8f1 }
.panel-info>.panel-footer+.panel-collapse .panel-body { border-bottom-color: #bce8f1 }
.well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #e3e3e3 }
.well blockquote { border-color: rgba(0,0,0,0.15) }
.well-lg { padding: 24px }
.well-sm { padding: 9px }
.close { float: right; font-size: 22.5px; font-weight: bold; line-height: 1; color: #2c3f51; opacity: .2 }
.close:hover,.close:focus { color: #2c3f51; text-decoration: none; cursor: pointer; opacity: .5 }
button.close { padding: 0; cursor: pointer; background: transparent; border: 0 }
.modal-open { overflow: hidden }
.modal { display: none; overflow: auto; position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040 }
.modal.fade .modal-dialog { }
.modal.in .modal-dialog { }
.modal-dialog { position: relative; width: auto; margin: 10px; z-index: 1050 }
.modal-content { position: relative; background-color: #fff; border: 1px solid #dee6ed; outline: none }
.modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1030; background-color: #73808c }
.modal-backdrop.fade { opacity: 0 }
.modal-backdrop.in { opacity: .5 }
.modal-header { padding: 15px; border-bottom: 1px solid #ebf0f4; min-height: 16.45px }
.modal-header .close { margin-top: -2px }
.modal-title { margin: 0; line-height: 1.45 }
.modal-body { position: relative; padding: 20px }
.modal-footer { margin-top: 15px; padding: 19px 20px 20px; text-align: right; border-top: 1px solid #ebf0f4 }
.modal-footer::before,.modal-footer::after { content: " "; display: table }
.modal-footer::after { clear: both }
.modal-footer::before,.modal-footer::after { content: " "; display: table }
.modal-footer::after { clear: both }
.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 }
.tooltip { position: absolute; z-index: 1030; display: block; visibility: visible; font-size: 13px; line-height: 1.4; opacity: 0 }
.tooltip.in { opacity: .9 }
.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: 250px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000 }
.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 { bottom: 0; left: 5px; border-width: 5px 5px 0; border-top-color: #000 }
.tooltip.top-right .tooltip-arrow { bottom: 0; right: 5px; border-width: 5px 5px 0; border-top-color: #000 }
.tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000 }
.tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000 }
.tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000 }
.tooltip.bottom-left .tooltip-arrow { top: 0; left: 5px; border-width: 0 5px 5px; border-bottom-color: #000 }
.tooltip.bottom-right .tooltip-arrow { top: 0; right: 5px; border-width: 0 5px 5px; border-bottom-color: #000 }
.popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; max-width: 276px; padding: 1px; text-align: left; background-color: #475160; border: 1px solid #dee6ed; white-space: normal }
.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: 15px; font-weight: normal; line-height: 18px; background-color: rgba(0,0,0,0); border-bottom: 1px solid rgba(0,0,0,0) }
.popover-content { padding: 9px 14px }
.popover .arrow,.popover .arrow::after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid }
.popover .arrow { border-width: 11px }
.popover .arrow::after { border-width: 10px; content: "" }
.popover.top .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #dee6ed; bottom: -11px }
.popover.top .arrow::after { content: " "; bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #475160 }
.popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #dee6ed }
.popover.right .arrow::after { content: " "; left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #475160 }
.popover.bottom .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #dee6ed; top: -11px }
.popover.bottom .arrow::after { content: " "; top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #475160 }
.popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #dee6ed }
.popover.left .arrow::after { content: " "; right: 1px; border-right-width: 0; border-left-color: #475160; bottom: -10px }
.clearfix::before,.clearfix::after { content: " "; display: table }
.clearfix::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 }
.invisible { visibility: hidden }
.text-hide { font: 0/0 a; color: transparent; background-color: transparent; border: 0 }
.hidden { display: none !important; visibility: hidden !important }
.affix { position: fixed }
[class^="icon-"]::before,[class*=" icon-"]::before { font-family: "fontello"; font-style: normal; font-weight: normal; display: inline-block; text-decoration: inherit; width: 1em; margin-right: .2em; text-align: center; font-variant: normal; text-transform: none; line-height: 1em; margin-left: .2em }
.icon-glass::before { content: "" }
.icon-resize-full-1::before { content: "" }
.icon-search::before { content: "" }
.icon-mail::before { content: "" }
.icon-mail-alt::before { content: "" }
.icon-heart::before { content: "" }
.icon-heart-empty::before { content: "" }
.icon-star::before { content: "" }
.icon-star-empty::before { content: "" }
.icon-star-half::before { content: "" }
.icon-star-half-alt::before { content: "" }
.icon-user::before { content: "" }
.icon-users::before { content: "" }
.icon-male::before { content: "" }
.icon-female::before { content: "" }
.icon-video::before { content: "" }
.icon-videocam::before { content: "" }
.icon-picture::before { content: "" }
.icon-camera::before { content: "" }
.icon-camera-alt::before { content: "" }
.icon-th-large::before { content: "" }
.icon-th::before { content: "" }
.icon-th-list::before { content: "" }
.icon-ok::before { content: "" }
.icon-ok-circled::before { content: "" }
.icon-ok-circled2::before { content: "" }
.icon-ok-squared::before { content: "" }
.icon-cancel::before { content: "" }
.icon-cancel-circled::before { content: "" }
.icon-cancel-circled2::before { content: "" }
.icon-plus::before { content: "" }
.icon-plus-circled::before { content: "" }
.icon-plus-squared::before { content: "" }
.icon-plus-squared-small::before { content: "" }
.icon-minus::before { content: "" }
.icon-minus-circled::before { content: "" }
.icon-minus-squared::before { content: "" }
.icon-minus-squared-alt::before { content: "" }
.icon-minus-squared-small::before { content: "" }
.icon-help::before { content: "" }
.icon-help-circled::before { content: "" }
.icon-info-circled::before { content: "" }
.icon-info::before { content: "" }
.icon-home::before { content: "" }
.icon-link::before { content: "" }
.icon-unlink::before { content: "" }
.icon-link-ext::before { content: "" }
.icon-link-ext-alt::before { content: "" }
.icon-attach::before { content: "" }
.icon-lock::before { content: "" }
.icon-lock-open::before { content: "" }
.icon-lock-open-alt::before { content: "" }
.icon-pin::before { content: "" }
.icon-eye::before { content: "" }
.icon-eye-off::before { content: "" }
.icon-tag::before { content: "" }
.icon-tags::before { content: "" }
.icon-bookmark::before { content: "" }
.icon-bookmark-empty::before { content: "" }
.icon-flag::before { content: "" }
.icon-flag-empty::before { content: "" }
.icon-flag-checkered::before { content: "" }
.icon-thumbs-up::before { content: "" }
.icon-thumbs-down::before { content: "" }
.icon-thumbs-up-alt::before { content: "" }
.icon-thumbs-down-alt::before { content: "" }
.icon-download::before { content: "" }
.icon-upload::before { content: "" }
.icon-download-cloud::before { content: "" }
.icon-upload-cloud::before { content: "" }
.icon-reply::before { content: "" }
.icon-reply-all::before { content: "" }
.icon-forward::before { content: "" }
.icon-quote-left::before { content: "" }
.icon-quote-right::before { content: "" }
.icon-export-alt::before { content: "" }
.icon-pencil::before { content: "" }
.icon-pencil-squared::before { content: "" }
.icon-edit::before { content: "" }
.icon-print::before { content: "" }
.icon-retweet::before { content: "" }
.icon-keyboard::before { content: "" }
.icon-gamepad::before { content: "" }
.icon-comment::before { content: "" }
.icon-chat::before { content: "" }
.icon-comment-empty::before { content: "" }
.icon-chat-empty::before { content: "" }
.icon-bell::before { content: "" }
.icon-bell-alt::before { content: "" }
.icon-attention-alt::before { content: "" }
.icon-attention::before { content: "" }
.icon-attention-circled::before { content: "" }
.icon-location::before { content: "" }
.icon-direction::before { content: "" }
.icon-compass::before { content: "" }
.icon-doc::before { content: "" }
.icon-docs::before { content: "" }
.icon-doc-text::before { content: "" }
.icon-file::before { content: "" }
.icon-doc-text-inv::before { content: "" }
.icon-folder-empty::before { content: "" }
.icon-folder-open-empty::before { content: "?" }
.icon-box::before { content: "?" }
.icon-rss::before { content: "?" }
.icon-rss-squared::before { content: "?" }
.icon-phone::before { content: "?" }
.icon-phone-squared::before { content: "?" }
.icon-menu::before { content: "?" }
.icon-cog::before { content: "?" }
.icon-cog-alt::before { content: "?" }
.icon-wrench::before { content: "?" }
.icon-basket::before { content: "?" }
.icon-calendar::before { content: "?" }
.icon-calendar-empty::before { content: "?" }
.icon-login::before { content: "?" }
.icon-logout::before { content: "?" }
.icon-mic::before { content: "?" }
.icon-mute::before { content: "?" }
.icon-volume-off::before { content: "?" }
.icon-volume-down::before { content: "?" }
.icon-volume-up::before { content: "?" }
.icon-headphones::before { content: "?" }
.icon-clock::before { content: "?" }
.icon-lightbulb::before { content: "?" }
.icon-block::before { content: "?" }
.icon-resize-full-alt::before { content: "?" }
.icon-resize-small::before { content: "?" }
.icon-resize-vertical::before { content: "?" }
.icon-resize-horizontal::before { content: "?" }
.icon-move::before { content: "?" }
.icon-zoom-in::before { content: "?" }
.icon-zoom-out::before { content: "?" }
.icon-down-circled2::before { content: "?" }
.icon-up-circled2::before { content: "?" }
.icon-down-dir::before { content: "?" }
.icon-up-dir::before { content: "?" }
.icon-left-dir::before { content: "?" }
.icon-right-dir::before { content: "?" }
.icon-down-open::before { content: "?" }
.icon-left-open::before { content: "?" }
.icon-right-open::before { content: "?" }
.icon-up-open::before { content: "?" }
.icon-angle-left::before { content: "?" }
.icon-angle-right::before { content: "?" }
.icon-angle-up::before { content: "?" }
.icon-angle-down::before { content: "?" }
.icon-angle-circled-left::before { content: "?" }
.icon-angle-circled-right::before { content: "?" }
.icon-angle-circled-up::before { content: "?" }
.icon-angle-circled-down::before { content: "?" }
.icon-angle-double-left::before { content: "?" }
.icon-angle-double-right::before { content: "?" }
.icon-angle-double-up::before { content: "?" }
.icon-angle-double-down::before { content: "?" }
.icon-down::before { content: "?" }
.icon-left::before { content: "?" }
.icon-right::before { content: "?" }
.icon-up::before { content: "?" }
.icon-down-big::before { content: "?" }
.icon-music::before { content: "?" }
.icon-archive::before { content: "?" }
.icon-up-big::before { content: "?" }
.icon-right-hand::before { content: "?" }
.icon-resize-small-1::before { content: "?" }
.icon-cancel-squared::before { content: "?" }
.icon-down-hand::before { content: "?" }
.icon-left-circled::before { content: "?" }
.icon-right-circled::before { content: "?" }
.icon-up-circled::before { content: "?" }
.icon-down-circled::before { content: "?" }
.icon-cw::before { content: "?" }
.icon-ccw::before { content: "?" }
.icon-refresh::before { content: "?" }
.icon-level-up::before { content: "?" }
.icon-level-down::before { content: "?" }
.icon-shuffle::before { content: "?" }
.icon-exchange::before { content: "?" }
.icon-collapse::before { content: "?" }
.icon-collapse-top::before { content: "?" }
.icon-expand::before { content: "?" }
.icon-play::before { content: "?" }
.icon-play-circled::before { content: "?" }
.icon-play-circled2::before { content: "?" }
.icon-stop::before { content: "?" }
.icon-pause::before { content: "?" }
.icon-to-end::before { content: "?" }
.icon-to-end-alt::before { content: "?" }
.icon-to-start::before { content: "?" }
.icon-to-start-alt::before { content: "?" }
.icon-fast-fw::before { content: "?" }
.icon-fast-bw::before { content: "?" }
.icon-eject::before { content: "?" }
.icon-signal::before { content: "?" }
.icon-award::before { content: "?" }
.icon-desktop::before { content: "?" }
.icon-laptop::before { content: "?" }
.icon-tablet::before { content: "?" }
.icon-mobile::before { content: "?" }
.icon-inbox::before { content: "?" }
.icon-globe::before { content: "?" }
.icon-sun::before { content: "?" }
.icon-cloud::before { content: "?" }
.icon-flash::before { content: "?" }
.icon-moon::before { content: "?" }
.icon-umbrella::before { content: "?" }
.icon-flight::before { content: "?" }
.icon-fighter-jet::before { content: "?" }
.icon-leaf::before { content: "?" }
.icon-font::before { content: "?" }
.icon-bold::before { content: "?" }
.icon-italic::before { content: "?" }
.icon-text-height::before { content: "?" }
.icon-text-width::before { content: "?" }
.icon-align-left::before { content: "?" }
.icon-align-center::before { content: "?" }
.icon-align-right::before { content: "?" }
.icon-align-justify::before { content: "?" }
.icon-list::before { content: "?" }
.icon-indent-left::before { content: "?" }
.icon-indent-right::before { content: "?" }
.icon-list-bullet::before { content: "?" }
.icon-list-numbered::before { content: "?" }
.icon-strike::before { content: "?" }
.icon-underline::before { content: "?" }
.icon-superscript::before { content: "?" }
.icon-subscript::before { content: "?" }
.icon-table::before { content: "?" }
.icon-columns::before { content: "?" }
.icon-crop::before { content: "?" }
.icon-scissors::before { content: "?" }
.icon-paste::before { content: "?" }
.icon-briefcase::before { content: "?" }
.icon-suitcase::before { content: "?" }
.icon-ellipsis::before { content: "?" }
.icon-ellipsis-vert::before { content: "?" }
.icon-off::before { content: "?" }
.icon-road::before { content: "?" }
.icon-list-alt::before { content: "?" }
.icon-qrcode::before { content: "?" }
.icon-barcode::before { content: "?" }
.icon-book::before { content: "?" }
.icon-ajust::before { content: "?" }
.icon-tint::before { content: "?" }
.icon-check::before { content: "?" }
.icon-check-empty::before { content: "?" }
.icon-circle::before { content: "?" }
.icon-circle-empty::before { content: "?" }
.icon-asterisk::before { content: "?" }
.icon-gift::before { content: "?" }
.icon-fire::before { content: "?" }
.icon-magnet::before { content: "?" }
.icon-ticket::before { content: "?" }
.icon-credit-card::before { content: "?" }
.icon-floppy::before { content: "?" }
.icon-megaphone::before { content: "?" }
.icon-key::before { content: "?" }
.icon-fork::before { content: "?" }
.icon-rocket::before { content: "?" }
.icon-bug::before { content: "?" }
.icon-certificate::before { content: "?" }
.icon-tasks::before { content: "?" }
.icon-filter::before { content: "?" }
.icon-beaker::before { content: "?" }
.icon-magic::before { content: "?" }
.icon-truck::before { content: "?" }
.icon-money::before { content: "?" }
.icon-euro::before { content: "?" }
.icon-pound::before { content: "?" }
.icon-dollar::before { content: "?" }
.icon-rupee::before { content: "?" }
.icon-yen::before { content: "?" }
.icon-renminbi::before { content: "?" }
.icon-won::before { content: "?" }
.icon-bitcoin::before { content: "?" }
.icon-sort::before { content: "?" }
.icon-sort-down::before { content: "?" }
.icon-sort-up::before { content: "?" }
.icon-sort-alt-up::before { content: "?" }
.icon-sort-alt-down::before { content: "?" }
.icon-sort-name-up::before { content: "?" }
.icon-sort-name-down::before { content: "?" }
.icon-sort-number-up::before { content: "?" }
.icon-sort-number-down::before { content: "?" }
.icon-hammer::before { content: "?" }
.icon-gauge::before { content: "?" }
.icon-sitemap::before { content: "?" }
.icon-spinner::before { content: "?" }
.icon-coffee::before { content: "?" }
.icon-food::before { content: "?" }
.icon-beer::before { content: "?" }
.icon-user-md::before { content: "?" }
.icon-stethoscope::before { content: "?" }
.icon-ambulance::before { content: "?" }
.icon-medkit::before { content: "?" }
.icon-h-sigh::before { content: "?" }
.icon-hospital::before { content: "?" }
.icon-building::before { content: "?" }
.icon-smile::before { content: "?" }
.icon-frown::before { content: "?" }
.icon-meh::before { content: "?" }
.icon-anchor::before { content: "?" }
.icon-terminal::before { content: "?" }
.icon-eraser::before { content: "?" }
.icon-puzzle::before { content: "?" }
.icon-shield::before { content: "?" }
.icon-extinguisher::before { content: "?" }
.icon-bullseye::before { content: "?" }
.icon-resize-full::before { content: "?" }
.icon-target::before { content: "?" }
.icon-layers::before { content: "?" }
.icon-chart-bar::before { content: "?" }
.icon-share::before { content: "?" }
.icon-hdd::before { content: "?" }
.icon-trash::before { content: "?" }
.icon-folder::before { content: "?" }
.icon-code::before { content: "?" }
.icon-folder-open::before { content: "?" }
.icon-left-big::before { content: "?" }
.icon-evernote::before { content: "?" }
.icon-right-big::before { content: "?" }
.icon-spin3::before { content: "?" }
.icon-spin4::before { content: "?" }
.icon-spin6::before { content: "?" }
.icon-arrows-cw::before { content: "?" }
.icon-resize-normal::before { content: "?" }
.icon-left-hand::before { content: "?" }
.icon-evernote-1::before { content: "?" }
.icon-up-hand::before { content: "?" }
.icon-file-pdf::before { content: "?" }
.icon-doc-text-1::before { content: "?" }
.icon-file-word::before { content: "?" }
.icon-file-excel::before { content: "?" }
.icon-file-powerpoint::before { content: "?" }
.icon-file-image::before { content: "?" }
.icon-file-archive::before { content: "?" }
.icon-file-audio::before { content: "?" }
.icon-file-video::before { content: "?" }
.icon-file-code::before { content: "?" }
.icon-doc-1::before { content: "?" }
.icon-share-1::before { content: "?" }
.icon-users-1::before { content: "?" }
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block }
audio,canvas,video { display: inline-block }
audio:not([controls]) { display: none; height: 0 }
[hidden],template { display: none }
html { font-family: sans-serif }
body { margin: 0 }
a { background: transparent }
a:focus { outline: thin dotted }
a:active,a:hover { outline: 0 }
h1 { font-size: 2em; margin: .67em 0 }
abbr[title] { border-bottom: 1px dotted }
b,strong { font-weight: bold }
dfn { font-style: italic }
hr { height: 0 }
mark { background: #ff0; color: #000 }
code,kbd,pre,samp { font-family: monospace, serif; font-size: 1em }
pre { white-space: pre-wrap }
q { quotes: "“" "”" "‘" "’" }
small { font-size: 80% }
sub,sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline }
sup { top: -0.5em }
sub { bottom: -0.25em }
img { border: 0 }
svg:not(:root) { overflow: hidden }
figure { margin: 0 }
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: .35em .625em .75em }
legend { border: 0; padding: 0 }
button,input,select,textarea { font-family: inherit; font-size: 100%; margin: 0 }
button,input { line-height: normal }
button,select { text-transform: none }
button,html input[type="button"],input[type="reset"],input[type="submit"] { cursor: pointer }
button[disabled],html input[disabled] { cursor: default }
input[type="checkbox"],input[type="radio"] { padding: 0 }
input[type="search"] { }
input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration { }
button::-moz-focus-inner,input::-moz-focus-inner { border: 0; padding: 0 }
textarea { overflow: auto; vertical-align: top }
table { border-collapse: collapse; border-spacing: 0 }
*,*::before,*::after { }
html { font-size: 62.5% }
body { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "STHeiti", "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif; font-size: 15px; line-height: 1.45; color: #2c3f51; background-color: none }
input,button,select,textarea { font-family: inherit; font-size: inherit; line-height: inherit }
a { color: #1980e6; text-decoration: none }
a:hover,a:focus { color: #0f4d8a; text-decoration: underline }
a:focus { outline: 5px auto -webkit-focus-ring-color }
img { vertical-align: middle }
.img-responsive { display: block; max-width: 100%; height: auto }
.img-rounded { }
.img-thumbnail { padding: 4px; line-height: 1.45; background-color: none; border: 1px solid #ddd; display: inline-block; max-width: 100%; height: auto }
.img-circle { }
hr { margin-top: 21px; margin-bottom: 21px; border: 0; border-top: 1px solid rgba(102,128,153,0.1) }
.sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0 }
h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6 { font-family: inherit; font-weight: 300; line-height: 1.1; color: inherit }
h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small { font-weight: normal; line-height: 1; color: #999 }
h1,h2,h3 { margin-top: 21px; margin-bottom: 10.5px }
h1 small,h2 small,h3 small,h1 .small,h2 .small,h3 .small { font-size: 65% }
h4,h5,h6 { margin-top: 10.5px; margin-bottom: 10.5px }
h4 small,h5 small,h6 small,h4 .small,h5 .small,h6 .small { font-size: 75% }
h1,.h1 { font-size: 39px }
h2,.h2 { font-size: 32px }
h3,.h3 { font-size: 26px }
h4,.h4 { font-size: 19px }
h5,.h5 { font-size: 15px }
h6,.h6 { font-size: 13px }
p { margin: 0 0 10.5px }
.lead { margin-bottom: 21px; font-size: 17px; font-weight: 200; line-height: 1.4 }
small,.small { font-size: 85% }
cite { font-style: normal }
.text-muted { color: #999 }
.text-primary { color: #428bca }
.text-primary:hover { color: #3071a9 }
.text-warning { color: #b89600 }
.text-warning:hover { color: #856d00 }
.text-danger { color: #d82a1a }
.text-danger:hover { color: #ab2114 }
.text-success { color: #3c763d }
.text-success:hover { color: #2b542c }
.text-info { color: #31708f }
.text-info:hover { color: #245269 }
.text-left { text-align: left }
.text-right { text-align: right }
.text-center { text-align: center }
.page-header { padding-bottom: 9.5px; margin: 42px 0 21px; border-bottom: 1px solid none }
ul,ol { margin-top: 0; margin-bottom: 10.5px }
ul ul,ol ul,ul ol,ol ol { margin-bottom: 0 }
.list-unstyled { padding-left: 0; list-style: none }
.list-inline { padding-left: 0; list-style: none }
.list-inline>li { display: inline-block; padding-left: 5px; padding-right: 5px }
.list-inline>li:first-child { padding-left: 0 }
dl { margin-top: 0; margin-bottom: 21px }
dt,dd { line-height: 1.45 }
dt { font-weight: bold }
dd { margin-left: 0 }
abbr[title],abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #999 }
.initialism { font-size: 90%; text-transform: uppercase }
blockquote { padding: 10.5px 21px; margin: 0 0 21px; border-left: 5px solid rgba(102,128,153,0.075) }
blockquote p { font-size: 18.75px; font-weight: 300; line-height: 1.25 }
blockquote p:last-child { margin-bottom: 0 }
blockquote small,blockquote .small { display: block; line-height: 1.45; color: #999 }
blockquote small::before,blockquote .small::before { content: "—?" }
blockquote.pull-right { padding-right: 15px; padding-left: 0; border-right: 5px solid rgba(102,128,153,0.075); border-left: 0 }
blockquote.pull-right p,blockquote.pull-right small,blockquote.pull-right .small { text-align: right }
blockquote.pull-right small::before,blockquote.pull-right .small::before { content: "" }
blockquote.pull-right small::after,blockquote.pull-right .small::after { content: "?—" }
blockquote::before,blockquote::after { content: "" }
address { margin-bottom: 21px; font-style: normal; line-height: 1.45 }
code,kbd,pre,samp { font-family: "Source Code Pro", monospace }
code { padding: 2px 4px; font-size: 90%; color: #2c3f51; background-color: rgba(102,128,153,0.075); white-space: nowrap }
pre { display: block; padding: 10px; margin: 0 0 10.5px; font-size: 14px; line-height: 1.45; color: #333; background-color: rgba(102,128,153,0.05); border: 1px solid rgba(102,128,153,0.075) }
pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent }
.pre-scrollable { max-height: 340px }
.pln { color: #000 }
.str { color: #080 }
.kwd { color: #008 }
.com { color: #800 }
.typ { color: #606 }
.lit { color: #066 }
.pun,.opn,.clo { color: #660 }
.tag { color: #008 }
.atn { color: #606 }
.atv { color: #080 }
.dec,.var { color: #606 }
.fun { color: #f00 }
pre.prettyprint { padding: 0; border: 0 }
ol.linenums { margin-top: 0; margin-bottom: 0 }
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
li.L1,li.L3,li.L5,li.L7,li.L9 { background: #eee }
.container { margin-bottom: 180px; text-align: justify }
a code { color: inherit }
h1 { font-size: 2.6em }
h2 { font-size: 2.15em }
h3 { font-size: 1.7em }
h4 { font-size: 1.25em }
h5 { font-size: 1em }
h6 { font-size: .85em }
h1,h2,h3,h4,h5,h6 { margin: 1.8em 0; text-align: start }
pre { }
p,pre,pre.prettyprint,blockquote { margin: 0 0 1.1em }
hr { margin: 2em 0 }
img { max-width: 100% }
.sequence-diagram,.flow-chart { text-align: center; margin-bottom: 1.1em }
.sequence-diagram text,.flow-chart text { font-size: 15px !important; font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "STHeiti", "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif !important }
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] { }
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] { }
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] { }
code,pre { font-family: "Source Code Pro", monospace; font-size: .9em }
code { white-space: normal }
pre,pre.prettyprint { text-align: start; border: 0 }
pre code,pre.prettyprint code { padding: 1.3em 2em !important }
pre.prettyprint.with-line-number { position: relative }
pre.prettyprint.with-line-number code { padding-left: 3.3em !important }
pre.prettyprint.with-line-number .hljs-comment.line-number { min-width: 2.2em; display: inline-block; text-align: right; opacity: .8; position: absolute; left: .3em }
.hljs-comment.line-number { display: none }
dt,dd { margin-top: 5px; margin-bottom: 5px }
dd { margin-left: 40px }
table { margin-bottom: 20px }
table th,table td { padding: 8px; line-height: 20px; vertical-align: top; border-top: 1px solid #ddd }
table th { font-weight: bold }
table thead th { vertical-align: bottom }
table caption+thead tr:first-child th,table caption+thead tr:first-child td,table colgroup+thead tr:first-child th,table colgroup+thead tr:first-child td,table thead:first-child tr:first-child th,table thead:first-child tr:first-child td { border-top: 0 }
table tbody+tbody { border-top: 2px solid #ddd }
blockquote { border-left-width: 10px; background-color: rgba(102,128,153,0.05); padding: 15px 20px }
blockquote p { margin-bottom: 1.1em; font-size: 1em; line-height: 1.45 }
blockquote ul:last-child,blockquote ol:last-child { margin-bottom: 0 }
ul,ol { margin-bottom: 1.1em }
ul ul,ol ul,ul ol,ol ol { margin-bottom: 1.1em }
kbd { padding: .1em .6em; border: 1px solid rgba(44,63,81,0.25); font-size: .7em; font-family: sans-serif; background-color: #fff; color: #333; display: inline-block; margin: 0 .1em; white-space: nowrap }
.toc ul { list-style-type: none; margin-bottom: 15px }
.footnote { vertical-align: top; position: relative; top: -0.5em; font-size: .8em }
li.checklist-item { list-style: none; margin-left: -1.2em }
.checklist { margin-bottom: 1.1em }
.checklist-item>.checklist { margin-left: 1.4em }
li>p:last-child { margin-bottom: 0 }
[class^="icon-"],[class*=" icon-"] { display: inline-block; line-height: 1.35em; vertical-align: middle; background-repeat: no-repeat }
.icon-code { font-size: 83%; line-height: 1.65em }
.icon-code::before { margin-left: .1em; margin-right: .6em }
.icon-trash { line-height: 1.5em }
.icon-folder-open { font-size: 80% }
.icon-folder-open::before { margin-right: .6em }
.icon-chart-bar { font-size: 95% }
.icon-chart-bar::before { margin-left: .3em; margin-right: .3em }
.icon-comment-alt,.icon-chat { font-size: 92% }
.icon-comment-alt::before,.icon-chat::before { margin-left: .1em; margin-right: .4em }
.icon-file { font-size: 104%; margin-left: 0; margin-right: 0 }
.icon-link { font-size: 104% }
[class^="icon-provider-"],[class*=" icon-provider-"] { background-image: url("../img/icons.png"); width: 18px; height: 16px; margin-top: -2px; margin-left: 2px }
.icon-provider-stackedit { background-position: 0 0 }
.icon-provider-gdrive,.icon-provider-gdrivesec,.icon-provider-gdriveter { background-position: -18px 0 }
.icon-provider-dropbox { background-position: -37px 0 }
.icon-provider-github,.icon-provider-gist { background-position: -54px 0 }
.icon-provider-blogger,.icon-provider-bloggerpage { background-position: -72px 0 }
.icon-provider-tumblr { background-position: -90px 0 }
.icon-provider-wordpress { background-position: -108px 0 }
.icon-provider-ssh { background-position: -126px 0 }
.icon-provider-gplus { background-position: -144px 0 }
.icon-provider-couchdb { background-position: -162px 0 }
body.rtl #wmd-input,body.rtl #preview-contents,body.rtl .input-file-title,body.rtl .search-bar input,body.rtl .modal-document-manager input,body.rtl .comments-popover,body.rtl .container { direction: rtl }
.MathJax_SVG_Display { text-align: center; margin: 1em 0; position: relative; display: block !important; text-indent: 0; max-width: none; max-height: none; min-width: 0; min-height: 0; width: 100% }
.MathJax_SVG { display: inline; font-style: normal; font-weight: normal; line-height: normal; font-size: 100%; text-indent: 0; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0; min-height: 0; border: 0; padding: 0; margin: 0; vertical-align: middle }
.hljs-light .hljs { display: block; padding: .5em; background-color: #f0f0f0 }
.hljs-light .hljs,.hljs-light .hljs-subst,.hljs-light .hljs-tag .hljs-title,.hljs-light .lisp .hljs-title,.hljs-light .clojure .hljs-built_in,.hljs-light .nginx .hljs-title { color: #000 }
.hljs-light .hljs-string,.hljs-light .hljs-title,.hljs-light .hljs-constant,.hljs-light .hljs-parent,.hljs-light .hljs-tag .hljs-value,.hljs-light .hljs-rules .hljs-value,.hljs-light .hljs-rules .hljs-value .hljs-number,.hljs-light .hljs-preprocessor,.hljs-light .hljs-pragma,.hljs-light .haml .hljs-symbol,.hljs-light .ruby .hljs-symbol,.hljs-light .ruby .hljs-symbol .hljs-string,.hljs-light .hljs-aggregate,.hljs-light .hljs-template_tag,.hljs-light .django .hljs-variable,.hljs-light .smalltalk .hljs-class,.hljs-light .hljs-addition,.hljs-light .hljs-flow,.hljs-light .hljs-stream,.hljs-light .bash .hljs-variable,.hljs-light .apache .hljs-tag,.hljs-light .apache .hljs-cbracket,.hljs-light .tex .hljs-command,.hljs-light .tex .hljs-special,.hljs-light .erlang_repl .hljs-function_or_atom,.hljs-light .asciidoc .hljs-header,.hljs-light .markdown .hljs-header,.hljs-light .coffeescript .hljs-attribute { color: #800 }
.hljs-light .smartquote,.hljs-light .hljs-comment,.hljs-light .hljs-annotation,.hljs-light .hljs-template_comment,.hljs-light .diff .hljs-header,.hljs-light .hljs-chunk,.hljs-light .asciidoc .hljs-blockquote,.hljs-light .markdown .hljs-blockquote { color: #888 }
.hljs-light .hljs-number,.hljs-light .hljs-date,.hljs-light .hljs-regexp,.hljs-light .hljs-literal,.hljs-light .hljs-hexcolor,.hljs-light .smalltalk .hljs-symbol,.hljs-light .smalltalk .hljs-char,.hljs-light .go .hljs-constant,.hljs-light .hljs-change,.hljs-light .lasso .hljs-variable,.hljs-light .makefile .hljs-variable,.hljs-light .asciidoc .hljs-bullet,.hljs-light .markdown .hljs-bullet,.hljs-light .asciidoc .hljs-link_url,.hljs-light .markdown .hljs-link_url { color: #080 }
.hljs-light .hljs-label,.hljs-light .hljs-javadoc,.hljs-light .ruby .hljs-string,.hljs-light .hljs-decorator,.hljs-light .hljs-filter .hljs-argument,.hljs-light .hljs-localvars,.hljs-light .hljs-array,.hljs-light .hljs-attr_selector,.hljs-light .hljs-important,.hljs-light .hljs-pseudo,.hljs-light .hljs-pi,.hljs-light .haml .hljs-bullet,.hljs-light .hljs-doctype,.hljs-light .hljs-deletion,.hljs-light .hljs-envvar,.hljs-light .hljs-shebang,.hljs-light .apache .hljs-sqbracket,.hljs-light .nginx .hljs-built_in,.hljs-light .tex .hljs-formula,.hljs-light .erlang_repl .hljs-reserved,.hljs-light .hljs-prompt,.hljs-light .asciidoc .hljs-link_label,.hljs-light .markdown .hljs-link_label,.hljs-light .vhdl .hljs-attribute,.hljs-light .clojure .hljs-attribute,.hljs-light .asciidoc .hljs-attribute,.hljs-light .lasso .hljs-attribute,.hljs-light .coffeescript .hljs-property,.hljs-light .hljs-phony { color: #88f }
.hljs-light .hljs-keyword,.hljs-light .hljs-id,.hljs-light .hljs-title,.hljs-light .hljs-built_in,.hljs-light .hljs-aggregate,.hljs-light .css .hljs-tag,.hljs-light .hljs-javadoctag,.hljs-light .hljs-phpdoc,.hljs-light .hljs-yardoctag,.hljs-light .smalltalk .hljs-class,.hljs-light .hljs-winutils,.hljs-light .bash .hljs-variable,.hljs-light .apache .hljs-tag,.hljs-light .go .hljs-typename,.hljs-light .tex .hljs-command,.hljs-light .asciidoc .hljs-strong,.hljs-light .markdown .hljs-strong,.hljs-light .hljs-request,.hljs-light .hljs-status { font-weight: bold }
.hljs-light .asciidoc .hljs-emphasis,.hljs-light .markdown .hljs-emphasis { font-style: italic }
.hljs-light .nginx .hljs-built_in { font-weight: normal }
.hljs-light .coffeescript .javascript,.hljs-light .javascript .xml,.hljs-light .lasso .markup,.hljs-light .tex .hljs-formula,.hljs-light .xml .javascript,.hljs-light .xml .vbscript,.hljs-light .xml .css,.hljs-light .xml .hljs-cdata { opacity: .5 }
.hljs-dark { background: #f6f6f6 }
.hljs-dark .hljs { display: block; padding: .5em; background: #23241f }
.hljs-dark .hljs,.hljs-dark .hljs-tag,.hljs-dark .css .hljs-rules,.hljs-dark .css .hljs-value,.hljs-dark .css .hljs-function .hljs-preprocessor,.hljs-dark .hljs-pragma { color: #f8f8f2 }
.hljs-dark .hljs-strongemphasis,.hljs-dark .hljs-strong,.hljs-dark .hljs-emphasis { color: #a8a8a2 }
.hljs-dark .hljs-bullet,.hljs-dark .hljs-blockquote,.hljs-dark .hljs-horizontal_rule,.hljs-dark .hljs-number,.hljs-dark .hljs-regexp,.hljs-dark .alias .hljs-keyword,.hljs-dark .hljs-literal,.hljs-dark .hljs-hexcolor { color: #ae81ff }
.hljs-dark .hljs-tag .hljs-value,.hljs-dark .hljs-code,.hljs-dark .hljs-title,.hljs-dark .css .hljs-class,.hljs-dark .hljs-class .hljs-title:last-child { color: #a6e22e }
.hljs-dark .hljs-link_url { font-size: 80% }
.hljs-dark .hljs-strong,.hljs-dark .hljs-strongemphasis { font-weight: bold }
.hljs-dark .hljs-emphasis,.hljs-dark .hljs-strongemphasis,.hljs-dark .hljs-class .hljs-title:last-child { font-style: italic }
.hljs-dark .hljs-keyword,.hljs-dark .hljs-function,.hljs-dark .hljs-change,.hljs-dark .hljs-winutils,.hljs-dark .hljs-flow,.hljs-dark .lisp .hljs-title,.hljs-dark .clojure .hljs-built_in,.hljs-dark .nginx .hljs-title,.hljs-dark .tex .hljs-special,.hljs-dark .hljs-header,.hljs-dark .hljs-attribute,.hljs-dark .hljs-symbol,.hljs-dark .hljs-symbol .hljs-string,.hljs-dark .hljs-tag .hljs-title,.hljs-dark .hljs-value,.hljs-dark .alias .hljs-keyword:first-child,.hljs-dark .css .hljs-tag,.hljs-dark .css .unit,.hljs-dark .css .hljs-important { color: #f92672 }
.hljs-dark .hljs-function .hljs-keyword,.hljs-dark .hljs-class .hljs-keyword:first-child,.hljs-dark .hljs-constant,.hljs-dark .css .hljs-attribute { color: #66d9ef }
.hljs-dark .hljs-variable,.hljs-dark .hljs-params,.hljs-dark .hljs-class .hljs-title { color: #f8f8f2 }
.hljs-dark .hljs-string,.hljs-dark .css .hljs-id,.hljs-dark .hljs-subst,.hljs-dark .haskell .hljs-type,.hljs-dark .ruby .hljs-class .hljs-parent,.hljs-dark .hljs-built_in,.hljs-dark .sql .hljs-aggregate,.hljs-dark .django .hljs-template_tag,.hljs-dark .django .hljs-variable,.hljs-dark .smalltalk .hljs-class,.hljs-dark .django .hljs-filter .hljs-argument,.hljs-dark .smalltalk .hljs-localvars,.hljs-dark .smalltalk .hljs-array,.hljs-dark .hljs-attr_selector,.hljs-dark .hljs-pseudo,.hljs-dark .hljs-addition,.hljs-dark .hljs-stream,.hljs-dark .hljs-envvar,.hljs-dark .apache .hljs-tag,.hljs-dark .apache .hljs-cbracket,.hljs-dark .tex .hljs-command,.hljs-dark .hljs-prompt,.hljs-dark .hljs-link_label,.hljs-dark .hljs-link_url { color: #e6db74 }
.hljs-dark .hljs-comment,.hljs-dark .hljs-javadoc,.hljs-dark .java .hljs-annotation,.hljs-dark .python .hljs-decorator,.hljs-dark .hljs-template_comment,.hljs-dark .hljs-pi,.hljs-dark .hljs-doctype,.hljs-dark .hljs-deletion,.hljs-dark .hljs-shebang,.hljs-dark .apache .hljs-sqbracket,.hljs-dark .tex .hljs-formula { color: #75715e }
.hljs-dark .coffeescript .javascript,.hljs-dark .javascript .xml,.hljs-dark .tex .hljs-formula,.hljs-dark .xml .javascript,.hljs-dark .xml .vbscript,.hljs-dark .xml .css,.hljs-dark .xml .hljs-cdata,.hljs-dark .xml .php,.hljs-dark .php .xml { opacity: .5 }
code { color: #c7254e; background-color: #f9f2f4 }
h1,h2,h3,h4,h5,h6 { font-weight: bold; margin: 1.2em 0 .6em 0 }
blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote h5,blockquote h6 { font-weight: bold; margin: .6em 0 }
.note-tags { color: rgba(44,63,81,0.3) }
.note-tags code { color: rgba(44,63,81,0.5); background: rgba(102,128,153,0.075); padding: 2px 5px }
.note-tags code:empty { display: none }
.note-tags .notebook { background: rgba(44,63,81,0.3); color: #fff; margin-right: 6px }
table th,table td,table thead:first-child tr:first-child th { padding: .5em; border: 1px solid #ddd; line-height: 1.5 }
.note-content { line-height: 1.5; color: #2c3f51 }
.note-content div,.note-content dl,.note-content dt,.note-content em,.note-content font,.note-content h3,.note-content h4,.note-content h5,.note-content h6,.note-content hr,.note-content i,.note-content ins,.note-content kbd,.note-content li,.note-content map,.note-content ol,.note-content p,.note-content pre,.note-content q,.note-content s,.note-content samp,.note-content small,.note-content span,.note-content strike,.note-content strong,.note-content sub,.note-content sup,.note-content table,.note-content tbody,.note-content td,.note-content tfoot,.note-content th,.note-content thead,.note-content tr,.note-content tt,.note-content u,.note-content ul { line-height: 1.6 }
.image-broken-replacement { text-align: center; font-style: italic; padding: 8px; color: rgba(102,128,153,0.6); background-color: rgba(102,128,153,0.075) }
th[align="center"] { text-align: center }
th[align="right"] { text-align: right }
.image-caption { font-size: .86em; margin-top: .6em; margin-bottom: 0 }
.alertify,.alertify-show,.alertify-log { }
.alertify-hide { }
.alertify-log-hide { }
.alertify-cover { position: fixed; z-index: 99999; top: 0; right: 0; bottom: 0; left: 0; background-color: #fff; opacity: 0 }
.alertify-cover-hidden { display: none }
.alertify { position: fixed; z-index: 99999; top: 50px; left: 50%; width: 550px; margin-left: -275px; opacity: 1 }
.alertify-hidden { opacity: 0; display: none }
:root *>.alertify-hidden { display: block; visibility: hidden }
.alertify-logs { position: fixed; z-index: 5000; bottom: 10px; right: 10px; width: 300px }
.alertify-logs-hidden { display: none }
.alertify-log { display: block; margin-top: 10px; position: relative; right: -300px; opacity: 0 }
.alertify-log-show { right: 0; opacity: 1 }
.alertify-log-hide { opacity: 0 }
.alertify-dialog { padding: 25px }
.alertify-resetFocus { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px }
.alertify-inner { text-align: center }
.alertify-text { margin-bottom: 15px; width: 100%; font-size: 100% }
.alertify-isHidden { display: none }
.alertify,.alertify-log { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "STHeiti", "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif }
.alertify { background: #fff; border: 1px solid #dee6ed; width: 398px; margin-left: -200px }
.alertify-dialog { padding: 0 }
.alertify-inner { text-align: left }
.alertify-message { padding: 15px; margin: 0 }
.alertify-text-wrapper { padding: 0 15px }
.alertify-text { display: block; width: 100%; height: 42px; padding: 6px 12px; font-size: 15px; line-height: 1.45; color: #2c3f51; vertical-align: middle; background-color: #fff; background-image: none; border: 1px solid #dee6ed }
.alertify-text:focus:focus { border-color: #66afe9; outline: 0 }
.alertify-text:focus:focus { border-color: #dee6ed; outline: 0 }
.alertify-text:focus:focus { border-color: rgba(25,128,230,0.5); outline: 0 }
.alertify-buttons { padding: 14px 15px 15px; background: #f6f7f9; border-top: 1px solid #ebf0f4; text-align: right }
.alertify-button { margin-left: 10px }
.alertify-button-cancel,.alertify-button-ok { display: inline-block; margin-bottom: 0; font-weight: normal; text-align: center; vertical-align: middle; cursor: pointer; background-image: none; border: 1px solid transparent; white-space: nowrap; padding: 6px 12px; font-size: 15px; line-height: 1.45 }
.alertify-button-cancel:focus,.alertify-button-ok:focus { outline: 5px auto -webkit-focus-ring-color }
.alertify-button-cancel:hover,.alertify-button-ok:hover,.alertify-button-cancel:focus,.alertify-button-ok:focus { color: #425e7b; text-decoration: none }
.alertify-button-cancel:active,.alertify-button-ok:active,.alertify-button-cancel.active,.alertify-button-ok.active { outline: 0; background-image: none }
.alertify-button-cancel { color: #425e7b; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.alertify-button-cancel:hover,.alertify-button-cancel:focus,.alertify-button-cancel:active,.alertify-button-cancel.active,.open .dropdown-toggle.alertify-button-cancel { color: #425e7b; background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.alertify-button-cancel:active,.alertify-button-cancel.active,.open .dropdown-toggle.alertify-button-cancel { background-image: none }
.alertify-button-cancel.disabled,.alertify-button-cancel[disabled],fieldset[disabled] .alertify-button-cancel,.alertify-button-cancel.disabled:hover,.alertify-button-cancel[disabled]:hover,fieldset[disabled] .alertify-button-cancel:hover,.alertify-button-cancel.disabled:focus,.alertify-button-cancel[disabled]:focus,fieldset[disabled] .alertify-button-cancel:focus,.alertify-button-cancel.disabled:active,.alertify-button-cancel[disabled]:active,fieldset[disabled] .alertify-button-cancel:active,.alertify-button-cancel.disabled.active,.alertify-button-cancel[disabled].active,fieldset[disabled] .alertify-button-cancel.active { background-color: rgba(0,0,0,0); border-color: rgba(0,0,0,0) }
.alertify-button-cancel .badge { color: rgba(0,0,0,0); background-color: #fff }
.alertify-button-ok { color: #425e7b; background-color: #e4ebf1; border-color: rgba(0,128,255,0.05) }
.alertify-button-ok:hover,.alertify-button-ok:focus,.alertify-button-ok:active,.alertify-button-ok.active,.open .dropdown-toggle.alertify-button-ok { color: #425e7b; background-color: #cad6e2; border-color: rgba(0,97,194,0.05) }
.alertify-button-ok:active,.alertify-button-ok.active,.open .dropdown-toggle.alertify-button-ok { background-image: none }
.alertify-button-ok.disabled,.alertify-button-ok[disabled],fieldset[disabled] .alertify-button-ok,.alertify-button-ok.disabled:hover,.alertify-button-ok[disabled]:hover,fieldset[disabled] .alertify-button-ok:hover,.alertify-button-ok.disabled:focus,.alertify-button-ok[disabled]:focus,fieldset[disabled] .alertify-button-ok:focus,.alertify-button-ok.disabled:active,.alertify-button-ok[disabled]:active,fieldset[disabled] .alertify-button-ok:active,.alertify-button-ok.disabled.active,.alertify-button-ok[disabled].active,fieldset[disabled] .alertify-button-ok.active { background-color: #e4ebf1; border-color: rgba(0,128,255,0.05) }
.alertify-button-ok .badge { color: #e4ebf1; background-color: #fff }
.alertify-log { background: #d9edf7; padding: 8px 14px; color: #3a8abf; border: 1px solid #bce8f1 }
.alertify-log-error { color: #b94a48; background: #f2dede; border: 1px solid #eed3d7 }
.alertify-log-success { color: #468847; background: #dff0d8; border: 1px solid #d6e9c6 }
.tour-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1030; background-color: #000; opacity: .8 }
.tour-step-backdrop { position: relative; z-index: 1031; background: inherit }
.tour-step-background { position: absolute; z-index: 1030; background: inherit }
.popover[class*="tour-"] { z-index: 1030 }
.popover[class*="tour-"] .popover-navigation { padding: 9px 14px }
.popover[class*="tour-"] .popover-navigation *[data-role="end"] { float: right }
.popover[class*="tour-"] .popover-navigation *[data-role="prev"],.popover[class*="tour-"] .popover-navigation *[data-role="next"],.popover[class*="tour-"] .popover-navigation *[data-role="end"] { cursor: pointer }
.popover[class*="tour-"] .popover-navigation *[data-role="prev"].disabled,.popover[class*="tour-"] .popover-navigation *[data-role="next"].disabled,.popover[class*="tour-"] .popover-navigation *[data-role="end"].disabled { cursor: default }
.popover[class*="tour-"].orphan { position: fixed; margin-top: 0 }
.popover[class*="tour-"].orphan .arrow { display: none }
div.jGrowl { z-index: 9999; color: #fff; font-size: 12px }
div.jGrowl { position: absolute }
body>div.jGrowl { position: fixed }
div.jGrowl.top-left { left: 0; top: 0 }
div.jGrowl.top-right { right: 0; top: 0 }
div.jGrowl.bottom-left { left: 0; bottom: 0 }
div.jGrowl.bottom-right { right: 0; bottom: 0 }
div.jGrowl.center { top: 0; width: 50%; left: 25% }
div.center div.jGrowl-notification,div.center div.jGrowl-closer { margin-left: auto; margin-right: auto }
div.jGrowl div.jGrowl-notification,div.jGrowl div.jGrowl-closer { background-color: #000; width: 235px; padding: 10px; margin-top: 5px; margin-bottom: 5px; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 1em; text-align: left; display: none }
div.jGrowl div.jGrowl-notification { min-height: 40px }
div.jGrowl div.jGrowl-notification,div.jGrowl div.jGrowl-closer { margin: 10px }
div.jGrowl div.jGrowl-notification div.jGrowl-header { font-weight: bold; font-size: .85em }
div.jGrowl div.jGrowl-notification div.jGrowl-close { z-index: 99; float: right; font-weight: bold; font-size: 1em; cursor: pointer }
div.jGrowl div.jGrowl-closer { padding-top: 4px; padding-bottom: 4px; cursor: pointer; font-size: .9em; font-weight: bold; text-align: center }
.animate-spin { display: inline-block }
.toast-title { font-weight: bold }
.toast-message { }
.toast-message a,.toast-message label { color: #fff }
.toast-message a:hover { color: #ccc; text-decoration: none }
.toast-close-button { position: relative; right: -0.3em; top: -0.3em; float: right; font-size: 20px; font-weight: bold; color: #fff; opacity: .8 }
.toast-close-button:hover,.toast-close-button:focus { color: #000; text-decoration: none; cursor: pointer; opacity: .4 }
button.toast-close-button { padding: 0; cursor: pointer; background: transparent; border: 0 }
.toast-top-full-width { top: 0; right: 0; width: 100% }
.toast-bottom-full-width { bottom: 0; right: 0; width: 100% }
.toast-top-left { top: 12px; left: 12px }
.toast-top-right { top: 12px; right: 12px }
.toast-bottom-right { right: 30px; bottom: 10px }
.toast-bottom-left { bottom: 12px; left: 12px }
#toast-container { position: fixed; z-index: 999999 }
#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div { width: 96%; margin: auto }
.toast { margin: 0 0 6px; padding: 8px; padding-left: 50px; min-width: 200px }
.toast { background-image: none !important }
.toast::before { position: fixed; font-family: fontello; font-size: 24px; line-height: 22px; float: left; padding-right: .5em; margin: auto .5em auto -1.5em }
.toast-warning::before { content: "" }
.toast-error::before { content: "" }
.toast-info::before { content: "" }
.toast-success::before { content: "" }
.toast-wait::before { content: "?" }
.toast { border: 2px solid #000; color: #030303; background-color: rgba(120,120,120,0.9) }
.toast-success { border: 2px solid #499249; color: #51a351; background-color: rgba(234,245,234,0.9) }
.toast-error { border: 2px solid #a9302a; color: #bd362f; background-color: rgba(247,225,223,0.9) }
.toast-info { border: 2px solid #2a85a0; color: #2f96b4; background-color: rgba(217,239,245,0.9) }
.toast-warning { border: 2px solid #b9751d; color: #cf8321; background-color: rgba(250,239,224,0.9) }
.toast-wait { border: none; padding: 3px 16px; color: #fff; font-size: 12px; background: none; margin: 0; width: auto; min-width: auto; position: relative }
.toast-wait .toast-message { position: relative }
.toast-wait::before { content: ""; background: #ed1d70; display: block; position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto }
body { text-align: start }
* { outline: none !important }
.working { cursor: progress }
.dragging { cursor: move !important }
.btn,.dropdown-menu { }
.dropdown-menu,.modal-content,.panel-content,.search-bar,.popover,.find-replace,.alertify { }
.dropdown-menu>li>a { padding: 5px 20px; border-top: 1px solid transparent; border-bottom: 1px solid transparent }
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus { border-color: #475160 }
.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus { border-color: transparent }
.collapsed>.icon-up-dir::before { content: "?" }
.modal.fade .modal-dialog { }
.modal-content { background-color: #f6f7f9 }
.modal-body { background-color: #fff; padding-bottom: 30px }
.modal-footer { margin-top: 0 }
.modal-iframe { display: block; margin: 30px auto 0; z-index: 1040 }
a { }
.nav-pills>li>a { border: 1px solid rgba(0,0,0,0) }
.nav-pills>li>a:hover,.nav-pills>li>a:focus { color: #036; border-color: #475160 }
.nav-pills>li.open>a .caret,.nav-pills>li>a:hover .caret,.nav-pills>li>a:focus .caret { border-top-color: #036; border-bottom-color: #036 }
.nav-pills>li.disabled>a:hover,.nav-pills>li.disabled>a:focus { border-color: rgba(0,0,0,0) }
.nav-pills>li.open>a,.nav-pills>li.open>a:hover,.nav-pills>li.open>a:focus { color: #036; border-color: #475160 }
.list-group-item { padding: 10px 15px; border-left-width: 0; border-right-width: 0; margin-bottom: 0 }
.list-group .list-group-item { }
a.list-group-item:hover,a.list-group-item:focus { color: #036; border-color: #475160 }
.list-group-item .checkbox { float: right; margin: 0; padding: 0; cursor: pointer }
.list-group-item .checkbox input { cursor: pointer; margin: 0 16px; height: 38px }
.form-group { margin-bottom: 1px; padding: 5px }
.text-danger:hover { color: #d82a1a }
.bring-to-front { z-index: 1050 !important }
.dialog-header-message { position: absolute; top: 12px; right: 55px; font-weight: bold }
.btn { padding: 8px 11px }
.btn-default:hover,.alertify-button-cancel:hover,.btn-default:focus,.alertify-button-cancel:focus,.btn-default:active,.alertify-button-cancel:active,.open .btn-default.dropdown-toggle,.open .alertify-button-cancel.dropdown-toggle { color: #036; border-color: rgba(0,128,255,0.1); background-color: rgba(102,128,153,0.04) !important }
.btn-primary:hover,.alertify-button-ok:hover,.btn-primary:focus,.alertify-button-ok:focus,.btn-primary:active,.alertify-button-ok:active,.open .btn-primary.dropdown-toggle,.open .alertify-button-ok.dropdown-toggle { color: #036; border-color: rgba(0,128,255,0.1); background-color: #dae3eb !important }
.btn-success:hover,.btn-success:focus,.btn-success:active,.open .btn-success.dropdown-toggle { color: #036 !important; border-color: rgba(0,128,255,0.1); background-color: rgba(89,128,166,0.05) !important }
.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.info-tooltip,.info-tooltip .btn-info,.open .btn-info.dropdown-toggle { color: #036; border-color: rgba(0,128,255,0.08); background-color: #f0f2f5 !important }
.btn-link:hover { text-decoration: none }
.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group { margin-left: 0 }
.btn-group>.btn+.dropdown-toggle { padding-right: 11px; padding-left: 11px }
.form-control { }
.form-inline * { float: none }
.form-control.error { border-color: #e84c3d }
.help-block { font-size: 12px }
.input-group-addon { }
a.input-group-addon { color: #1980e6 }
.input-group-btn .btn i { font-size: 110% }
.input-group-btn:first-child .btn { margin-right: 6px }
.input-group-btn:last-child .btn { margin-left: 6px }
.navbar { position: absolute; top: 0; left: 0; width: 100%; padding: 0; border: 0; border-top: 1px solid rgba(0,128,255,0.1); border-bottom: 1px solid rgba(0,128,255,0.1); z-index: 20 }
.navbar .left-space,.navbar .right-space { width: 25px; height: 38px }
.navbar .nav { float: left; margin: 5px 9px; height: 38px }
.navbar .nav>li { display: inline-block }
.navbar .nav.pull-right { float: right }
.navbar .nav.pull-right>li>.dropdown-menu { right: 0; left: auto }
.navbar .nav.pull-right>li>.dropdown-menu .dropdown-menu { right: 100%; left: auto; margin-right: -1px; margin-left: 0 }
.navbar .btn { height: 38px; padding: 6px 8px }
.navbar .btn-group>.btn.disabled *,.navbar .btn-group>.btn.blocked *,.navbar .btn-group>.btn[disabled] * { color: rgba(54,77,99,0.3) }
.navbar .button-open-discussion.some { color: #e0b800 !important }
.navbar .button-open-discussion.replied { color: #e74434 !important }
.navbar .file-title-navbar { display: inline-block; vertical-align: middle; padding: 1px 15px; font-size: 1.5em; line-height: 1.45em; font-weight: 200; overflow: hidden; white-space: nowrap }
.navbar .file-title-navbar a i { }
.navbar .file-title-navbar a .icon-link-ext-alt { color: transparent; position: relative; font-size: 12px; top: -12px; right: 6px; width: 0 }
.navbar .file-title-navbar a:hover [class^="icon-provider-"],.navbar .file-title-navbar a:hover [class*=" icon-provider-"] { opacity: .5 }
.navbar .file-title-navbar a:hover .icon-link-ext-alt { color: #036 }
.navbar .input-file-title-container { display: inline-block; vertical-align: middle }
.navbar .input-file-title-container .input-file-title { width: 400px; font-size: 16px; height: 38px }
.navbar .working-indicator { display: inline-block; vertical-align: middle; overflow: hidden; height: 38px; width: 60px; padding-top: 8px }
.navbar .working-indicator .bar { display: inline-block; width: 14px; height: 6px; margin: 0 2px; opacity: .25; background-color: rgba(54,77,99,0.75) }
.navbar .offline-status>div { display: inline-block; vertical-align: middle; height: 38px; padding: 9px 10px }
.navbar .buttons-dropdown>.nav { margin-left: 0; margin-right: 0 }
.navbar div.dropdown-menu { top: initial; padding: 5px; margin: 10px }
.menu-panel,.document-panel { height: 100%; z-index: 30; overflow: initial }
.menu-panel .toggle-button,.document-panel .toggle-button { background-color: #fff; height: 38px; position: absolute; margin-top: 6px }
.menu-panel .toggle-button:active,.document-panel .toggle-button:active { }
.menu-panel .toggle-button i,.document-panel .toggle-button i { color: #737373; font-size: 14px }
.menu-panel .toggle-button:hover,.document-panel .toggle-button:hover,.menu-panel.panel-open>.toggle-button,.document-panel.panel-open>.toggle-button { border-width: 1px }
.menu-panel .panel-content,.document-panel .panel-content { overflow: auto; padding-bottom: 30px; height: 100% }
.menu-panel .panel-content a>i,.document-panel .panel-content a>i { color: inherit }
.menu-panel { position: absolute; top: 0; right: 0; width: 320px }
.menu-panel i { margin-right: 8px }
.menu-panel small { color: rgba(129,158,187,0.6); padding-left: 30px }
.menu-panel .nav { margin: 10px 0 20px }
.menu-panel .nav>li>a:hover,.menu-panel .nav>li>a:focus { background-color: rgba(0,0,0,0) }
.menu-panel .alert { padding: 10px; margin-left: -10px; margin-right: -10px }
.menu-panel .toggle-button { border-top: 4px solid rgba(255,230,0,0.9); border-right: 5px solid rgba(117,183,253,0.9); border-bottom: 4px solid rgba(255,138,0,0.9); right: -37px; z-index: -1; padding: 0 10px 0 50px }
.menu-panel .toggle-button:hover,.menu-panel.panel-open>.toggle-button { right: -45px }
.menu-panel .panel-content { background-color: #f6f7f9; padding-top: 6px; border-right: 1px solid #ebf0f4 }
.document-panel { position: absolute; top: 0; left: 0; width: 380px }
.document-panel .toggle-button { border-top: 4px solid rgba(255,230,0,0.9); border-left: 5px solid rgba(187,213,0,0.9); border-bottom: 4px solid rgba(255,138,0,0.9); left: -37px; padding: 0 50px 0 3px; z-index: -1 }
.document-panel .toggle-button i.icon-folder-open { font-size: 19px; padding-bottom: 1px }
.document-panel .toggle-button:hover,.document-panel.panel-open>.toggle-button { left: -45px }
.document-panel .panel-content { background-color: #f6f7f9; padding-top: 210px; border-left: 1px solid #ebf0f4 }
.viewer .document-panel .panel-content { padding-top: 75px }
.document-panel .panel-content .icon-layers { font-size: 135% }
.document-panel .search-bar { position: absolute; background-color: #475160; margin: -10px 25px 0; padding: 15px 20px; z-index: 3; border: 1px solid #dee6ed }
.document-panel .search-bar .nav { margin-bottom: 10px }
.document-panel .search-bar .nav>li>a { padding: 8px 15px }
.document-panel .search-bar .nav>li>a:hover,.document-panel .search-bar .nav>li>a:focus { background-color: rgba(0,0,0,0) }
.document-panel .list-group-item { margin: 0 }
.document-panel .folder { font-weight: bold; color: #425e7b; border-top-color: #f2f5f8 }
.document-panel .list-group { margin: 0 }
.document-panel .list-group .nav { border: 0; margin: 0 }
.document-panel .list-group .nav .file { padding-left: 30px; padding-right: 30px }
.dropdown-file-selector { top: 6px; right: 45px; left: auto; margin: 0; min-width: 280px; max-width: 400px; max-height: 400px }
.modal-document-manager { margin-bottom: 0 }
.modal-document-manager .nav-pills { margin-bottom: 15px }
.modal-document-manager .list-group .nav { margin-bottom: 30px; border: 0; margin: 0 }
.modal-document-manager .list-group .nav .file { padding-left: 20px }
.modal-document-manager .file-list .list-group-item { background-color: rgba(0,0,0,0); padding: 0 3px }
.modal-document-manager .input-rename { width: 220px; height: 38px }
.modal .list-group .list-group-item { }
.modal .list-group-item { padding: 3px; margin: 0; border-left-width: 1px; border-right-width: 1px }
.modal .list-group-item i { margin-right: 3px }
.modal .list-group-item .btn { float: right; margin-right: 3px }
.modal .list-group-item .btn i { margin: 0; font-size: 105% }
.modal .list-group-item .btn i.icon-pencil { font-size: 115% }
.modal .folder,.modal .document { font-weight: bold; color: #425e7b; font-size: 15px; background-color: rgba(0,0,0,0) }
.modal .name,.modal .date,.modal .file-count { padding: 9px 20px 9px 15px }
.modal .name i.icon-file,.modal .name i.icon-folder { margin-right: 8px; font-size: 20px; line-height: 15px; margin-top: -2px }
.modal .date { font-weight: normal }
.extension-buttons>.btn-group>.btn,.extension-preview-buttons>.btn-group>.btn,.extension-buttons>.btn-group>.btn,.extension-preview-buttons>.btn-group>.btn { }
.extension-buttons>.btn-group:first-child>.btn,.extension-preview-buttons>.btn-group:first-child>.btn,.extension-buttons>.btn-group:first-child>.btn,.extension-preview-buttons>.btn-group:first-child>.btn { }
.extension-buttons>.btn-group:last-child>.btn,.extension-preview-buttons>.btn-group:last-child>.btn,.extension-buttons>.btn-group:last-child>.btn,.extension-preview-buttons>.btn-group:last-child>.btn { }
.extension-preview-buttons { position: absolute; right: 0; bottom: 0; z-index: 40; background-color: #e4ebf1; border: 1px solid #cfdae5; cursor: move }
.extension-preview-buttons.animate { }
.extension-preview-buttons .btn-group .btn { position: initial; border: 0 }
.extension-preview-buttons .dropdown-menu { margin-top: 6px; margin-bottom: 6px; padding-bottom: 20px }
.extension-preview-buttons hr { margin: 0 }
.extension-preview-buttons .markdown-syntax,.extension-preview-buttons .table-of-contents { padding-right: 20px; margin-right: -20px; width: 330px }
.extension-preview-buttons .markdown-syntax { white-space: normal }
.extension-preview-buttons .table-of-contents { padding: 20px 0 15px; margin-left: -10px }
.extension-preview-buttons .table-of-contents ul { margin-left: 10px; padding-left: 10px }
.extension-preview-buttons .stat-button .value { vertical-align: text-top }
.extension-preview-buttons .drag-me { color: #364d63 }
.extension-preview-buttons .drag-me i::before { width: 5px }
.modal-settings .modal-header { padding-bottom: 0 }
.modal-settings textarea { max-width: 100%; min-height: 100px }
.modal-settings .panel { border: 0; background: #fff; border-bottom: 1px solid #f2f5f8 }
.modal-settings .accordion-heading { padding: 12px 15px }
.modal-settings .accordion-heading .checkbox { margin-top: 0; margin-bottom: 0 }
.modal-settings .accordion-inner { border: 0; padding: 10px 40px 20px }
.modal-settings .accordion-inner .form-horizontal .control-label { text-align: left }
.modal-settings .accordion-inner .form-horizontal .form-inline .label-text { margin-left: 15px }
.modal-settings .tab-pane-button-container { width: 220px; margin: 10px auto 20px }
.modal-settings .tab-pane-button-container .btn { text-align: start; padding-left: 15px }
.modal-settings .nav-tabs { margin: 15px 0 0 }
.modal-settings .nav-tabs>li>a:hover,.modal-settings .nav-tabs>li>a:focus { color: #036; border-color: rgba(0,128,255,0.1); background-color: rgba(102,128,153,0.04); border-bottom-color: rgba(0,0,0,0) }
.modal-settings .nav-tabs>li.active>a,.modal-settings .nav-tabs>li.active>a:hover,.modal-settings .nav-tabs>li.active>a:focus { color: #2c3f51; background-color: #fff; border-color: #ebf0f4; border-bottom-color: rgba(0,0,0,0); margin-bottom: -1px; padding: 10px 15px 11px }
.modal-manage-sync .sync-list,.modal-manage-publish .publish-list,.modal-manage-sharing .share-editor-list,.modal-manage-sharing .share-viewer-list { margin-bottom: 20px }
.modal-manage-sync .sync-list .entry,.modal-manage-publish .publish-list .entry,.modal-manage-sharing .share-editor-list .entry,.modal-manage-sharing .share-viewer-list .entry { margin-bottom: 10px }
.publish-custom-template-collapse { margin-bottom: 0 }
.publish-custom-template-collapse textarea { max-width: 100%; min-height: 100px }
.layout-wrapper-l1,.layout-wrapper-l2,.layout-wrapper-l3 { position: absolute; top: 0; left: 0; overflow: hidden }
.layout-animate { }
.layout-resizer { position: absolute; top: 0; left: 0; width: 32px; height: 32px }
.layout-resizer.open { cursor: e-resize }
.layout-vertical .layout-resizer.open { cursor: s-resize }
.layout-toggler { position: absolute; top: 0; left: 0; padding: 0; margin: 0; width: 32px; height: 32px }
.layout-toggler i { font-size: 22px }
.layout-toggler.layout-toggler-preview { line-height: 55px }
.layout-animate .layout-toggler.layout-toggler-preview { }
.layout-toggler.layout-toggler-preview i::before { content: "?" }
.layout-toggler.layout-toggler-preview.open>i::before { content: "?" }
.layout-vertical .layout-toggler.layout-toggler-preview { line-height: 1.45 }
.layout-vertical .layout-toggler.layout-toggler-preview i::before { content: "?" }
.layout-vertical .layout-toggler.layout-toggler-preview.open>i::before { content: "?" }
.layout-toggler.layout-toggler-navbar { line-height: 0 }
.layout-toggler.layout-toggler-navbar i { font-size: 16px; height: 12px; overflow: hidden }
#wmd-input { position: absolute; top: 0; left: 0; font-family: "PT Sans", sans-serif; line-height: 1.65; letter-spacing: normal; border: none; padding: 0; overflow: auto; white-space: pre-wrap }
#wmd-input>.editor-content { padding-bottom: 230px }
#wmd-input>.editor-margin { position: absolute; top: 0; left: 0 }
#wmd-input>.editor-margin .discussion { font-size: 17px; position: absolute; cursor: pointer }
#wmd-input>.editor-margin .discussion.new { display: none }
#wmd-input>.editor-margin .discussion.new:hover,#wmd-input>.editor-margin .discussion.new.active,#wmd-input>.editor-margin .discussion.new.active:hover { display: inline-block; color: rgba(102,128,153,0.35) !important }
#wmd-input>.editor-margin .discussion.added { color: rgba(235,192,0,0.7) }
#wmd-input>.editor-margin .discussion.added:hover,#wmd-input>.editor-margin .discussion.added.active,#wmd-input>.editor-margin .discussion.added.active:hover { color: #ebc000 !important }
#wmd-input>.editor-margin .discussion.replied { color: rgba(230,59,43,0.7) }
#wmd-input>.editor-margin .discussion.replied:hover,#wmd-input>.editor-margin .discussion.replied.active,#wmd-input>.editor-margin .discussion.replied.active:hover { color: rgba(230,59,43,0.8) !important }
#wmd-input>.editor-margin .discussion.icon-split { font-size: 22px }
#wmd-input>.editor-margin .discussion.icon-split::before { margin-right: 0 }
#wmd-input>.editor-margin .discussion:hover,#wmd-input>.editor-margin .discussion.active { text-decoration: none }
#wmd-input.has-selection>.editor-margin .discussion.new { display: inline-block; color: rgba(102,128,153,0.25) }
#wmd-input.font-monospaced * { font-family: "Source Code Pro", monospace !important; line-height: 1.65 !important; font-size: 1em !important }
#wmd-input.ace_editor { font-family: "Source Code Pro", monospace !important }
#wmd-input .comment-highlight,#wmd-input .find-replace-highlight { background-color: rgba(255,230,0,0.5) }
#wmd-input .find-replace-select { background-color: #b5d5ff }
#wmd-input .conflict { font-weight: bold; color: #e63b2b }
#wmd-input .ace_print-margin { margin-left: -20px; background: none !important }
.editor .md,.editor .hr { color: rgba(102,128,153,0.6); font-style: normal; font-weight: normal }
.editor .code,.editor .pre { color: #29333d; font: normal .9em "Source Code Pro", monospace }
.editor .tag { color: #29333d; font: bold .9em "Source Code Pro", monospace }
.editor .tag .punctuation,.editor .tag .attr-value,.editor .tag .attr-name { font-weight: normal }
.editor .latex,.editor .math { color: #668099 }
.editor .entity { font: italic .9em "Source Code Pro", monospace; color: #668099 }
.editor .table { font: normal .9em "Source Code Pro", monospace }
.editor .table * { font-size: 1em }
.editor .comment { font-size: .9em; color: rgba(102,128,153,0.6) }
.editor .keyword { color: #47596b; font-weight: bold }
.editor .code,.editor .img,.editor .imgref,.editor .md-toc { background-color: rgba(102,128,153,0.075); padding: .15em 0 }
.editor .md-toc { font-size: 2.5em; padding: .2em }
.editor .md-underlined-text { color: inherit }
.editor .blockquote { color: #668099 }
.editor .h1,.editor .h2,.editor .h3,.editor .h4,.editor .h5,.editor .h6 { font-weight: 600 }
.editor .h1 .md-hash,.editor .h2 .md-hash,.editor .h3 .md-hash,.editor .h4 .md-hash,.editor .h5 .md-hash,.editor .h6 .md-hash { color: rgba(102,128,153,0.4) }
.editor .h1,.editor .h11 { font-size: 1.7em }
.editor .h2,.editor .h22 { font-size: 1.4em }
.editor .h3 { font-size: 1.2em }
.editor .h4 { font-size: 1.1em }
.editor .h5 { font-size: 1em }
.editor .h6 { font-size: .9em }
.editor .em,.editor .em .md { font-style: italic }
.editor .strong,.editor .strong .md { font-weight: bold }
.editor .md-strike-text { text-decoration: line-through }
.editor .url,.editor .email,.editor .md-underlined-text { text-decoration: underline }
.editor .linkdef .url { color: rgba(102,128,153,0.6) }
.editor .img,.editor .imgref { padding: .2em .4em; padding-right: 0 }
.editor .md-bang,.editor .md-alt,.editor .md-title { color: #587ea4 }
.editor .md-checkbox { display: inline-block; font-size: 0 }
.editor .md-checkbox::before { content: "?"; font-size: 26px; vertical-align: -1px; line-height: 0; cursor: pointer }
.editor .md-checkbox.checked::before { content: "?" }
.editor .md-checkbox.checked+.md-checkbox-content { text-decoration: line-through }
.ace_dark .md,.ace_dark .hr { color: rgba(139,158,177,0.8) }
.ace_dark .code,.ace_dark .img,.ace_dark .imgref,.ace_dark .md-toc { background-color: rgba(0,0,0,0.33) }
.ace_dark .tag { color: #868686 }
.ace_dark .code,.ace_dark .pre { color: #868686 }
.find-replace { position: absolute; bottom: 0; width: 410px; background-color: #f6f7f9; padding: 15px 20px; border-top: 1px solid #dee6ed; border-right: 1px solid #dee6ed }
.find-replace .form-group { width: 180px; padding: 0 5px }
.find-replace .close { position: absolute; right: 20px; top: 10px }
.preview-panel { position: absolute; top: 0; left: 0; overflow: hidden; z-index: 9 }
.layout-animate .preview-panel { }
.layout-vertical .preview-panel { }
.preview-container { position: absolute; overflow: auto }
.wmd-prompt-background { display: none }
div.dropdown-menu { padding: 5px 20px; background-color: #475160 }
div.dropdown-menu p,div.dropdown-menu blockquote { margin: 10px 0 }
div.dropdown-menu .stat { margin: 20px 0 10px }
div.dropdown-menu i { margin-right: 0 }
div.dropdown-menu textarea { width: 250px; height: 150px }
div.dropdown-menu a:hover,div.dropdown-menu a:focus { color: #0f4d8a }
div.dropdown-menu h1,div.dropdown-menu h2,div.dropdown-menu h3 { margin: 1em 0 }
.title-icon-category { display: inline-block; opacity: .15; margin-top: -2px; margin-left: -2px; margin-right: 3px; font-size: 1em; vertical-align: top }
.file-title-navbar .title-icon-category { font-size: 16px }
.picker-dialog { z-index: 1050 !important }
.picker-dialog-bg { z-index: 1040 !important }
.tooltip-inner { text-align: left }
.tooltip li { line-height: 1.4 }
input[type="file"] { line-height: inherit; height: inherit; border: none !important }
.drop-zone { border: 2px dashed #bbb; padding: 40px; text-align: center; font-size: 24px; color: #bbb }
.modal-import-harddrive-html textarea { width: 530px; max-width: 530px; height: 120px }
.label.comment { white-space: inherit }
.sharing-tweet { float: left; margin: 5px 10px 0 0 }
.popover { max-width: 350px; padding: 15px }
.popover .popover-title { font-weight: 300; font-size: 24px; padding: 10px 15px }
.popover .disabled { display: none }
.popover iframe { position: absolute }
.comments-popover .popover { max-width: 230px; padding: 10px 20px 0 }
.comments-popover .popover .popover-title { padding: 5px 0 15px; border-bottom: 1px solid rgba(102,128,153,0.1); line-height: 1.1; overflow: hidden }
.comments-popover .popover .popover-title .action-remove-discussion { font-size: 16px; line-height: 22px }
.comments-popover .popover .popover-content { margin: 0; padding: 0 }
.comments-popover .popover .popover-content .scrollport { overflow: auto; max-height: 230px; padding: 10px 20px 0; margin: 0 -20px }
.comments-popover .popover .popover-content .btn { padding: 6px 11px }
.comments-popover .popover .popover-content .comment-block { margin-bottom: 5px }
.comments-popover .popover .popover-content .form-group,.comments-popover .popover .popover-content blockquote { margin-bottom: 10px; padding: 0 }
.comments-popover .popover .popover-content .comment-author { font-weight: bold; color: #2c3f51 }
.comments-popover .popover .popover-content .icon-comment { font-size: 15px; color: rgba(235,192,0,0.6) }
.comments-popover .popover .popover-content .reply .icon-comment { color: rgba(230,59,43,0.7) }
.comments-popover .popover .popover-content .new-comment-block .icon-comment { color: rgba(102,128,153,0.35) }
.comments-popover .popover .popover-content .input-comment-author { border: none; background: none; font-weight: bold; height: 28px; padding: 0 0 5px; width: 140px; display: inline-block }
.comments-popover .popover .popover-content hr { margin: 0 0 10px }
.comments-popover .popover.top .arrow,.comments-popover .popover.bottom .arrow { margin-right: 1px; border-right-width: 0 }
.comments-popover .popover.top .arrow::after,.comments-popover .popover.bottom .arrow::after { margin-left: -11px; border-right-width: 0 }
.comments-popover .popover.top .arrow::after { bottom: 2px }
.comments-popover .popover.bottom .arrow::after { top: 2px }
div.jGrowl { z-index: 1040; font-size: 14px }
div.jGrowl.bottom-right { right: 35px }
div.jGrowl div.jGrowl-notification,div.jGrowl div.jGrowl-closer { background-color: rgba(115,128,140,0.9); width: 240px; margin: 6px 0; padding: 10px 12px; font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "STHeiti", "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif }
div.jGrowl div.jGrowl-notification { min-height: 65px }
.viewer .document-panel .search-bar { padding: 20px 20px 10px }
.viewer .document-panel .search-bar .input-group-btn { display: none }
.viewer .navbar .file-title-navbar { cursor: initial }
.layout-toggler { display: none }
.editor-navbar { position: absolute; z-index: 10; right: 50%; background: none !important; margin-top: 6px; margin-right: 20px }
.editor-navbar .editor-navbar-bg { width: 100%; height: 100%; position: absolute; left: 0; top: 0; opacity: .8 }
.editor-navbar .btn { color: inherit; opacity: .5 }
.editor-navbar .btn:hover { opacity: .9 }
.editor-navbar .btn:active,.editor-navbar .btn:focus { color: inherit !important }
.editor-navbar .btn-success:hover,.editor-navbar .btn-success:focus,.editor-navbar .btn-success:active,.editor-navbar .btn-success.active,.editor-navbar .open .dropdown-toggle.btn-success { color: inherit !important }
.preview-buttons-container .btn { color: rgba(102,128,153,0.35) }
.preview-buttons-container .btn:hover,.preview-buttons-container .btn:active,.preview-buttons-container .btn:focus { color: #036 }
.preview-buttons-container .btn,.editor-navbar-buttons .btn { font-size: 16px }
.editor-navbar-buttons>.btn-group { display: inline-block }
.wmd-buttons-group { display: inline-block }
.wmd-buttons-group .wmd-button-group1 { opacity: 0 }
.wmd-buttons-group .wmd-button-group1 li { display: none }
.wmd-buttons-group:hover .wmd-button-group1 { opacity: 1; visibility: visible }
.wmd-buttons-group:hover .wmd-button-group1 li { display: block }
.shrink-editor-btn { display: none }
.file-status-lock { display: none }
.resize-editor-btn { position: fixed; right: 50%; bottom: 10px; margin-right: 20px }
.open-folder-btn { background: none; border: 2px solid; padding: 1px 4px; left: -5px; top: 6px; position: absolute; border-color: currentColor; opacity: .5; z-index: 10; color: inherit }
.open-folder-btn:hover { color: inherit; opacity: .9 }
.profile-btn { top: 10px; background: none; padding: 3px; border: 2px solid rgba(102,128,153,0.35); border-color: currentColor; margin-left: 10px }
.profile-btn:hover { border-color: currentColor }
.preview-buttons-container { position: absolute; z-index: 100; margin-top: 6px; right: 20px }
.ui-layout-resizer-south-closed .preview-buttons-container { display: none !important }
.preview-buttons-container .btn-group .btn { position: initial }
.preview-buttons-container .dropdown-menu { padding-bottom: 20px }
.preview-buttons-container .markdown-syntax,.preview-buttons-container .table-of-contents { padding-right: 20px; margin-right: -20px; width: 330px }
.preview-buttons-container .markdown-syntax { white-space: normal; max-height: 350px }
.preview-buttons-container .table-of-contents { margin-left: -10px; max-height: 400px }
.preview-buttons-container .table-of-contents ul { margin-left: 10px; padding-left: 10px }
#theme-list { max-height: 500px }
.editor-hosted-buttons { display: inline-block }
#app_wrap.no-preview .preview-buttons { display: inline-block }
.preview-buttons { padding-right: 10px }
.full-editor-btn.open .icon-resize-full { display: inline-block }
.full-editor-btn.open .icon-resize-small-1 { display: none }
.full-editor-btn .icon-resize-full { display: none }
.full-editor-btn .icon-resize-small-1 { display: inline-block }
#app_wrap.no-preview .editor-navbar { right: 20px; margin-right: 0 }
.dropdown-menu { background-color: #546072; border-color: #3e4755 }
.dropdown-menu>li>a { color: #eee; padding: 5px 20px; border-top: 1px solid transparent; border-bottom: 1px solid transparent }
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus { color: #eee; background-color: #4b5666; border-color: #475160 }
.dropdown-menu>li>a.selected { background: #74b936 !important; color: #fff !important }
.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus { border-color: transparent }
.menu-panel .panel-content,.document-panel .panel-content { background-color: #546072 }
.modal-content,.panel-content { }
.document-panel .panel-content { border-left: none }
.menu-panel .panel-content { border-right: none }
.list-group .nav { border-left: 10px solid #e4ebf1; margin-left: 15px }
.list-group .nav>li>a { border-top: 1px solid rgba(0,0,0,0); border-bottom: 1px solid rgba(0,0,0,0) }
.list-group .nav>li>a:hover,.list-group .nav>li>a:focus { border-top-color: #475160; border-bottom-color: #475160 }
.list-group .nav>li>a.active { border-top-color: rgba(0,128,255,0.05); border-bottom-color: rgba(0,128,255,0.05) }
.list-group .nav>li:focus { outline: none }
.list-group .nav>li.active>a { background: #4b5666; border-top-color: rgba(0,128,255,0.05); border-bottom-color: rgba(0,128,255,0.05) }
.nav-pills>li>a { border: 1px solid rgba(0,0,0,0) }
.nav-pills>li>a:hover,.nav-pills>li>a:focus { border-color: #475160 }
.nav-pills>li.disabled>a:hover,.nav-pills>li.disabled>a:focus { border-color: rgba(0,0,0,0) }
.nav-pills>li.open>a,.nav-pills>li.open>a:hover,.nav-pills>li.open>a:focus { border-color: #475160 }
.list-group-item { padding: 10px 15px; margin-bottom: 0 }
.list-group .list-group-item { background: #546072 }
.list-group-item:hover { border-top-color: #475160; border-bottom-color: #475160; background: #4b5666 !important }
.list-group-item:focus,.active>.list-group-item { border-top-color: #475160; border-bottom-color: #475160; background: #3a424f !important }
a.list-group-item { }
a.list-group-item:hover,a.list-group-item:focus { color: #eee }
.username { padding: 10px 20px; background: #454f5d; color: #fff; margin-top: -6px }
.vip-status { float: right; background: #74b936; color: #fff; padding: 2px; cursor: pointer }
.vip-status .renew { padding: 0 6px; display: none }
.vip-status:hover .renew { display: inline }
.vip-status.expired { background: #ccc }
.vip-status .icon { margin-right: 0 }
.menu-panel i { margin-right: 2px }
.menu-panel .sub-menu,.document-panel .sub-menu { background: #4b5666 }
.menu-panel .sub-menu a,.document-panel .sub-menu a { color: #eee }
.menu-panel .sub-menu .nav,.document-panel .sub-menu .nav { margin-left: 0; border-left: none; margin: 0 }
.menu-panel .sub-menu .nav li:hover,.document-panel .sub-menu .nav li:hover { background: #454f5d }
.document-panel.panel-open { width: 385px }
.document-panel .panel-content { background-color: #546072; padding-top: 60px }
.document-panel .panel-content .icon-layers { font-size: 135% }
.document-panel .search-bar { position: absolute; background-color: #475160; z-index: 3; border: 1px solid #3e4755; border-top: 0; width: 100%; margin: 0; padding: 10px 10px }
.document-panel .search-bar .input-group-addon { color: #eee; background-color: #546072; border-color: #3e4755; border-left: 1px solid #3e4755 }
.document-panel .search-bar input[type="text"] { border-color: #3e4755 }
.document-panel .dropdown-header { padding-top: 10px }
#search-and-sync input { width: calc(100% - 30px) }
#search-and-sync .input-group-addon,#search-and-sync input { }
.file-action { float: right; display: none }
.file-action i { padding-top: 2px }
.folder-wrapper .icon-folder-open-empty { display: none }
.folder-wrapper.active .icon-folder-open-empty { display: inline-block }
.folder-wrapper.active .icon-folder-empty { display: none }
.folder-wrapper.active a.collapsed .icon-folder-open-empty { display: none }
.folder-wrapper.active a.collapsed .icon-folder-empty { display: inline-block }
.folder-wrapper .file-notebook { display: none !important }
.folder-wrapper.active>.list-group-item { border-top-color: #3a424f; border-bottom-color: #3a424f }
.folder-wrapper>.list-group-item .shared-icon { float: right }
.file-item:hover .file-action,li.active>.file-item .file-action { display: block }
.file-item:hover .file-notebook,li.active>.file-item .file-notebook { display: none }
.file-item .file-notebook { float: right; opacity: .8 }
.file-item .file-notebook .label { display: inline-block; max-width: 130px; overflow: hidden; vertical-align: middle }
.file-item .file-notebook .icon-star-empty { color: rgba(255,255,255,0.66) }
.file-item .file-notebook .label { padding: .4em .6em }
.file-item.synced { color: #bbb }
.file-status-label { color: #aaa }
.archive-splitter:last-child { display: none }
.document-list { height: 100%; overflow: auto; position: relative }
.document-list .sub-menu .file-item { background: none }
.document-list .sub-menu .file-item:hover,.document-list .sub-menu .file-item:focus { background: none !important }
.document-list ul>li.active .file-item,.document-list .file-wrapper.active .file-item { background: #74b936 !important; color: #fff }
.document-list ul>li.active .file-status-label,.document-list .file-wrapper.active .file-status-label { color: #fff }
.document-list ul>li.active .label-success,.document-list .file-wrapper.active .label-success { background: #2a4313 }
.folder-top { position: absolute; display: none; z-index: 10000; width: 100% }
.footer-left-btn { float: left; position: relative }
.extension-preview-buttons { background-color: #546072; border-color: #3e4755 }
.extension-preview-buttons .drag-me { color: #eee }
.extension-preview-buttons .btn-success { color: #eee }
.extension-preview-buttons .btn-success:hover,.extension-preview-buttons .btn-success:active { color: #eee !important; background-color: #454f5d !important }
.extension-preview-buttons .open .btn-success { color: #eee !important; background-color: #454f5d !important }
.extension-preview-buttons .dropdown-menu { background-color: #fff; border-color: #dee6ed }
.extension-preview-buttons.closed { opacity: .25 }
.extension-preview-buttons.closed.info-tooltip-container { opacity: 1 }
.atwho-view-ul { max-height: 300px; overflow: scroll; position: relative }
.atwho-view-ul li[shared="1"]::before { content: "?"; margin-right: .4em; margin-left: 0 }
#app_wrap.readonly .editor-navbar-buttons,#app_wrap.readonly .save-file { display: none }
#app_wrap.readonly .file-status-lock { display: inline-block }
.markdown-syntax pre { margin: 0; background: none; font-size: 12px }
.markdown-syntax table td { border: 2px solid #fff }
.markdown-syntax table tr td:first-child { background: #91b82d; color: #fff; font-weight: bold }
.markdown-syntax table tr td { background: #eee }
.markdown-syntax table tr td i { font-size: 12px; color: #aaa; font-style: initial }
.markdown-syntax table tr td:last-child { background: #fff }
.markdown-syntax kbd { padding: .1em .6em; border: 1px solid #ccc; font-size: 11px; background-color: #f7f7f7; color: #333; display: inline-block; margin: 0 .2em; line-height: 1.4; white-space: nowrap }
.modal-help .modal-dialog { width: 870px }
.modal-help .modal-dialog .markdown-table { float: left }
.modal-help .modal-dialog .key-table { width: 260px; float: right }
.modal-changelog .modal-dialog .modal-body { text-align: left }
#toggle-preview { display: none }
.full-preview { padding: 0; background: #fff }
.full-preview .layout-wrapper-l3 { }
.full-preview #wmd-input,.full-preview #ace-input,.full-preview .extension-preview-buttons,.full-preview .editor-navbar,.full-preview .modal-backdrop,.full-preview .preview-buttons,.full-preview .open-folder-btn { display: none }
.full-preview .preview-container { width: auto !important; position: relative; height: auto !important }
.full-preview .preview-panel { position: relative; max-width: 960px; margin: auto; left: 0; width: auto !important; height: auto !important; overflow: visible; display: block !important; min-height: 100% }
.full-preview .preview-panel::before { background: inherit; content: " "; position: absolute; width: 100%; height: 100%; top: 0; left: -100% }
.full-preview .preview-panel::after { background: inherit; content: " "; position: absolute; width: 100%; height: 100%; top: 0; right: -100% }
.full-preview #toggle-preview { display: block; font-size: 24px; position: absolute; right: 10px; top: 10px; cursor: pointer; color: rgba(102,128,153,0.35); z-index: 10 }
.full-preview #toggle-preview:hover,.full-preview #toggle-preview:active,.full-preview #toggle-preview:focus { color: #036 }
#readme,#images_area { display: none }
#titlebar { height: 20px; line-height: 18px; z-index: 1000000 }
#titlebar~.layout-wrapper-l1 { top: 20px }
#titlebar~.layout-wrapper-l1 .open-folder-btn { top: 22px }
#titlebar [class^="icon"]::before { margin: 0 .1em }
#titlebar i { opacity: .8; cursor: pointer }
#titlebar i:hover { opacity: .9 }
#titlebar .window-file { position: absolute; left: 1px }
#titlebar-bg { position: absolute; width: 100%; height: 100% }
#dragbar { height: 100%; overflow: hidden; margin: 0 20px }
#dragbar.disabled { }
.window_resizer { float: right; margin-top: 1px }
.editor-hosted-buttons { display: inline-block }
.window-fullscreen { position: absolute; right: 4px; top: -1px }
body.app { overflow: hidden }
body.app .open-folder-btn { display: none }
body.app .for-mac { display: none }
body.app.mac .window_resizer { display: none }
body.app.mac .window_resizer.for-mac { float: left; display: flex; margin-left: 4px; margin-top: 0 }
body.app.mac #titlebar .window-file { position: static; margin-left: 15px }
body.app.mac #titlebar i { margin: 1px }
body.app.mac .window-close { }
body.app.mac .window-min { }
body.app.mac .window-max { }
body.app img[src^="http"] { }
body.app .preview-container { }
#settings .col-lg-4 { float: left; text-align: right; width: 33.33333333% }
#settings .col-lg-7 { float: left; width: 58.33333333% }
#settings .form-inline .col-lg-7 { width: 58.33333333% }
#settings .form-inline .form-control { display: inline-block }
#settings .form-inline * { float: none }
#settings .help-block { font-size: 12px }
#settings .form-control { height: 34px }
#settings textarea.form-control { width: 100% }
.toast-warning::before { content: "" }
.toast-error::before { content: "" }
.toast-info::before { content: "" }
.toast-success::before { content: "" }
.modal.slim .modal-dialog { width: 400px }
.modal.slim .modal-title { text-align: inherit }
.modal.slim .modal-content { background: #fff; text-align: center }
.modal.slim .modal-content p { color: #777 }
.modal.slim .modal-body { padding-top: 0; padding-bottom: 0 }
.modal.slim .modal-footer { border: none; text-align: center }
.modal.slim .modal-header { border: none; color: #546072 }
.modal.slim .btn-primary { background: #74b936; color: #fff }
.modal.slim .btn-primary:hover,.modal.slim .btn-primary:active,.modal.slim .btn-primary:focus { background: #68a530 !important }
.modal-dialog.slim .modal-header { padding: 10px 15px }
.modal-dialog.slim .modal-body { padding: 10px 20px }
.modal-dialog.slim .modal-footer { padding: 10px; background-color: #fff }
.modal.error .modal-header { color: #b90b0b }
#ace-input { display: none }
.layout-wrapper-l2::before { position: absolute; content: ""; width: 100%; height: 100%; background: #f9fafb }
#preview-contents { margin-top: 30px; padding-left: 10px; padding-right: 10px }
.ace_dark .ace_gutter { color: #aaa !important; background: rgba(0,0,0,0.2) !important }
.ace_gutter-cell { padding-left: 0 !important }
.attachment-wrapper { overflow: hidden }
.attachment-placeholder { float: left; display: block }
.attachment-placeholder:hover { text-decoration: none }
.attachment-placeholder i { font-size: 3em; float: left }
.attachment-placeholder .file-name { vertical-align: -0.6em; font-weight: bold; line-height: 1.8em }
.attachment-placeholder .file-size { display: flex; opacity: .6; font-size: 80%; white-space: nowrap }
.attachment-placeholder img { display: none }
#edit-conflict-container { left: 50%; bottom: 6px; right: 1em; margin-left: 1em; position: fixed; z-index: 11111111; display: none }
#edit-conflict-container .toast { margin-bottom: 0 }
#edit-conflict-container .message-content { background-color: #f9f0e3; color: #cf8321; padding: 4px 4px; float: left; padding-right: 10px }
.no-preview #edit-conflict-container { left: 0 }
#loading { position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 10000000; background: #fff; color: #74b936; text-align: center }
#loading .loading-container { position: absolute; margin: auto; left: 0; right: 0; top: 30%; bottom: 0 }
#loading b { color: #fff; background: #74b936; font-weight: normal; padding: 5px 5px; margin: 10px; font-size: 50px }
#loading h1,#loading h2,#loading h3,#loading h4 { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", "STHeiti", "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, sans-serif; text-align: center }
#loading .reverse { color: #fff !important; background: #74b936 !important; padding: 4px }
#loading #loading-app-name { text-align: center; font-size: 54px; margin-top: 0; margin-bottom: .8em }
#loading #loading-slogan { font-weight: normal }
#loading #loading-text { margin: 80px auto; text-align: center; margin-bottom: 40px }
#loading #loading-view-doc { font-size: 16px; margin: 10px auto }
#loading #loading-view-doc a { padding: 10px; border: 1px solid #74b936 }
#loading #loading-view-doc a:link,#loading #loading-view-doc a:hover,#loading #loading-view-doc a:active,#loading #loading-view-doc a:visited { color: #74b936; text-decoration: none }
.slim-scroll ::-webkit-scrollbar { height: 10px; width: 7px; background: transparent }
.slim-scroll ::-webkit-scrollbar:hover { background: rgba(128,128,128,0.1) }
.slim-scroll ::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.3) }
.slim-scroll ::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.6) }
.slim-scroll ::-webkit-scrollbar-corner { background: #000 }
.slim-scroll .ace_dark .ace_scrollbar::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.3) }
.slim-scroll .ace_dark .ace_scrollbar::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.6) }
.slim-scroll .ace_scroller { right: 4px !important }
.slim-scroll .ace_scrollbar-v { right: 4px !important }
.slim-scroll #preview { right: 2px }
.atwho-view { position: absolute; top: 0; left: 0; display: none; margin-top: 18px; background: #fff; color: #000; border: 1px solid #ddd; min-width: 120px; z-index: 11110 !important }
.atwho-view .cur { background: #36f; color: #fff }
.atwho-view .cur small { color: #fff }
.atwho-view strong { color: #36f }
.atwho-view .cur strong { color: #fff; font: bold }
.atwho-view ul { list-style: none; padding: 0; margin: auto }
.atwho-view ul li { display: block; padding: 5px 10px; border-bottom: 1px solid #ddd; cursor: pointer }
.atwho-view small { font-size: smaller; color: #777; font-weight: normal }</style>
<style>code[class*="language-"],pre[class*="language-"] { color: black; background: none; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; text-align: left; white-space: pre; word-spacing: normal; line-height: 1.5 }
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { background: #b3d4fc }
pre[class*="language-"]::selection,pre[class*="language-"] ::selection,code[class*="language-"]::selection,code[class*="language-"] ::selection { background: #b3d4fc }
pre[class*="language-"] { padding: 1em; margin: .5em 0; overflow: auto }
:not(pre)>code[class*="language-"],pre[class*="language-"] { background: #f5f2f0 }
:not(pre)>code[class*="language-"] { padding: .1em; white-space: normal }
.token.comment,.token.prolog,.token.doctype,.token.cdata { color: slategray }
.token.punctuation { color: #999 }
.namespace { opacity: .7 }
.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted { color: #905 }
.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted { color: #690 }
.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string { color: #a67f59; background: hsla(0, 0%, 100%, .5) }
.token.atrule,.token.attr-value,.token.keyword { color: #07a }
.token.function { color: #DD4A68 }
.token.regex,.token.important,.token.variable { color: #e90 }
.token.important,.token.bold { font-weight: bold }
.token.italic { font-style: italic }
.token.entity { cursor: help }</style>
前言
继续更新“用 C 写一个 web 服务器”项目(上期链接:用C写一个web服务器(一) 基础功能),本次更新选择了 I/O 模型的优化,因为它是服务器的基础,这个先完成的话,后面的优化就可以选择各个模块来进行,不必进行全局化的改动了。
I/O模型
接触过 socket 编程的同学应该都知道一些 I/O 模型的概念,linux 中有阻塞 I/O、非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和 异步 I/O 五种模型。
其他模型的具体概念这里不多介绍,只简单地提一下自己理解的 I/O 多路复用:简单的说就是由一个进程来管理多个 socket,即将多个 socket 放入一个表中,在其中有 socket 可操作时,通知进程来处理, I/O 多路复用的实现方式有 select、poll 和 epoll。
select/poll/epoll
在 linux下,通过文件描述符(file descriptor, 下 fd)来进行 socket 的操作,所以下文均是对 fd 操作。
首先说最开始实现的 select 的问题:
- select 打开的 fd 最大数目有限制,一般为1024,在当前计算系统的并发量前显然有点不适用了。
- select 在收到有 fd 可操作的通知时,是无法得知具体是哪个 fd 的,需要线性扫描 fd 表,效率较低。
- 当有 fd 可操作时,fd 会将 fd 表复制到内核来遍历,消耗也较大。
随着网络技术的发展,出现了 poll:poll 相对于 select,使用 pollfd 表(链表实现) 来代替 fd,它没有上限,但受系统内存的限制,它同样使用 fd 遍历的方式,在并发高时效率仍然是一个问题。
最终,epoll 在 Linux 2.6 的内核面世,它使用事件机制,在每一个 fd 上添加事件,当fd 的事件被触发时,会调用回调函数来处理对应的事件,epoll 的优势总之如下:
- 只关心活跃的 fd,精确定位,改变了poll的时间效率 O(n) 到 O(1);
- fd 数量限制是系统能打开的最大文件数,会受系统内存和每个 fd 消耗内存的影响,以当前的系统硬件配置,并发数量绝对不是问题。
- 内核使用内存映射,大量 fd 向内核态的传输不再是问题。
为了一步到位,也是为了学习最先进的I/O多路复用模型,直接使用了 epoll 机制,接下来介绍一下 epoll 相关基础和自己服务器的实现过程。
epoll介绍
epoll 需要引入<sys/epoll.h>
文件,首先介绍一下 epoll 系列函数:
epoll_create
int epoll_create(int size);
创建一个 epoll 实例,返回一个指向此 epoll 实例的文件描述符,当 epoll 实例不再使用时,需要使用close()
方法来关闭它。
在最初的实现中, size
作为期望打开的最大 fd 数传入,以便系统分配足够大的空间。在最新版本的内核中,系统内核动态分配内存,已不再需要此参数了,但为了避免程序运行在旧内核中会有问题,还是要求此值必须大于0;
epoll_ctl
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
-
epfd 是通过 epoll_create 返回的文件描述符
-
op 则是文件描述符监听事件的操作方式,EPOLL_CTL_ADD/EPOLL_CTL_MOD/EPOLL_CTL_DEL
分别表示添加、修改和删除一个监听事件。
-
fd 为要监听的文件描述符。
-
event 为要监听的事件,可选事件和行为会在下面描述,它的结构如下:
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
struct epoll_event {
uint32_t events; /* epoll事件 */
epoll_data_t data; /* 事件相关数据 */
};
epoll_wait
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
监听 epoll 事件:
- events 是 epoll 事件数组,epoll 事件的结构上面已经介绍过。
- maxevents 是一次监听获取到的最大事件数目。
- timeout 是一次监听中获取不到事件的最长等待时间,设置成 -1 会一直阻塞等待,0 则会立即返回。
epoll行为
在 epoll_ctl 的 event 参数中,事件 events 有如下可选项:
EPOLLIN(可读)、EPOLLOUT(可写)、EPOLLRDHUP(连接关闭)、EPOLLPRI(紧急数据可读),此外 EPOLLERR(错误),EPOLLHUP(连接挂断)事件会被 epoll 默认一直监听。
除了设置事件外,还可以对监听的行为设置:
- level trigger:此行为被 epoll 默认支持,不必设置。在 epoll_wait 得到一个事件时,如果应用程序不处理此事件,在 level trigger 模式下,epoll_wait 会持续触发此事件,直到事件被程序处理;
- EPOLLET(edge trigger):在 edge trigger 模式下,事件只会被 epoll_wait 触发一次,如果用户不处理此事件,不会在下次 epoll_wait 再次触发。在处理得当的情况下,此模式无疑是高效的。需要注意的是此模式需求 socket 处理非阻塞模式,下面会实现此模式。
- EPOLLONESHOT:在单次命中模式下,对同一个文件描述符来说,同类型的事件只会被触发一次,若想重复触发,需要重新给文件描述符注册事件。
- EPOLLWAKEUP:3.5版本加入,如果设置了单次命中和ET模式,而且进程有休眠唤醒能力,当事件被挂起和处理时,此选项确保系统不进入暂停或休眠状态。 事件被 epoll_wait 调起后,直到下次 epoll_wait 再次调起此事件、文件描述符被关闭,事件被注销或修改,都会被认为是处于处理中状态。
- EPOLLEXCLUSIVE:4.5版本加入,为一个关联到目标文件描述符的 epoll 句柄设置独占唤醒模式。如果目标文件描述符被关联到多个 epoll 句柄,当有唤醒事件发生时,默认所有 epoll 句柄都会被唤醒。而都设置此标识后,epoll 句柄之一被唤醒,以避免“惊群”现象。
当监听事件和行为需求同时设置时,使用运算符 |
即可。
代码实现
整体处理逻辑
使用 epoll 时的服务器受理客户端请求逻辑如下:
- 创建服务器 socket,注册服务器 socket 读事件;
- 客户端连接服务器,触发服务器 socket 可读,服务器创建客户端 socket,注册客户端socket 读事件;
- 客户端发送数据,触发客户端 socket 可读,服务器读取客户端信息,将响应写入 socket;
- 客户端关闭连接,触发客户端 socket 可读,服务器读取客户端信息为空,注销客户端 socket 读事件;
代码实现如下(详细处理方式见 GitHub:我是地址):
erver_fd = server_start();
epoll_fd = epoll_create(FD_SIZE);
epoll_register(epoll_fd, server_fd, EPOLLIN|EPOLLET);// 这里注册socketEPOLL事件为ET模式
while (1) {
event_num = epoll_wait(epoll_fd, events, MAX_EVENTS, 0);
for (i = 0; i < event_num; i++) {
fd = events[i].data.fd;
// 如果是服务器socket可读,则处理连接请求
if ((fd == server_fd) && (events[i].events == EPOLLIN)){
accept_client(server_fd, epoll_fd);
// 如果是客户端socket可读,则获取请求信息,响应客户端
} else if (events[i].events == EPOLLIN){
deal_client(fd, epoll_fd);
} else if (events[i].events == EPOLLOUT)
// todo 数据过大,缓冲区不足的情况待处理
continue;
}
}
需要注意的是,客户端socket在可读之后也是立刻可写的,我这里直接读取一次请求,然后将响应信息 write 进去,没有考虑读数据时缓冲区满的问题。
这里提出的解决方案为:
- 设置一个客户端 socket 和 buffer 的哈希表;
- 在读入一次信息缓冲区满时 recv 会返回
EAGIN
错误,这时将数据放入 buffer,暂时不响应。
- 后续读事件中读取到数据尾后,再注册 socket 可写事件。
- 在处理可写事件时,读取 buffer 内的全部请求内容,处理完毕后响应给客户端。
- 最后注销 socket 写事件。
设置epoll ET(edge trigger)模式
上文说过,ET模式是 epoll 的高效模式,事件只会通知一次,但处理良好的情况下会更适用于高并发。它需要 socket 在非阻塞模式下才可用,这里我们实现它。
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
// 获取服务器socket的设置,并添加"不阻塞"选项
flags = fcntl(sock_fd, F_GETFL, 0);
fcntl(sock_fd, F_SETFL, flags|O_NONBLOCK);
.....
// 这里注册服务器socket EPOLL事件为ET模式
epoll_register(epoll_fd, server_fd, EPOLLIN|EPOLLET);
我将处理事件注掉后使用一次客户端连接请求进行了测试,很清晰地说明了 ET模式下,事件只触发一次的现象,前后对比图如下:
小结
Mac OS X 操作系统的某些部分是基于 FreeBSD 的,FreeBSD 不支持,MAC 也不支持(不过有相似的 kqueue),跑到开发机上开发的,作为一个最基础的 C learner, 靠着printf()
和fflush()
两个函数来调试的,不过搞了很久总算是完成了,有用 C 的前辈推荐一下调试方式就最好了。。
另外 epoll 在最新的内核中也更新了些内容,旧的很多博客都没有提到,话说照这样的发展速度,我这篇也会在一段时间后“过时”吧,哈哈~
如果您觉得本文对您有帮助,可以点击下面的 推荐 支持一下我。博客一直在更新,欢迎 关注 。
参考:
IO多路复用之epoll总结
epoll精髓
epoll interface detail (很不错的英文文档,推荐)
用C写一个web服务器(二) I/O多路复用之epoll