Browse code

Move static docs into master branch

The hand-maintained static HTML docs for DevStack have been in a
GitHub gh-pages branch; move them into the master branch in
preparation for hosting them in openstack.org infrastructure.

By default tools/build_docs.sh now builds the static HTML output
into docs/html.

Change-Id: Ide5f7d980a294c7a9f8a3decaed0939f1c239934

Dean Troyer authored on 2014/06/21 07:53:55
Showing 31 changed files
... ...
@@ -1,23 +1,23 @@
1
-proto
2 1
 *~
3 2
 .*.sw?
4 3
 *.log
5 4
 *.log.[1-9]
6
-src
7
-localrc
8
-local.sh
5
+*.pem
6
+.localrc.auto
7
+.prereqs
8
+.stackenv
9
+accrc
10
+docs/files
11
+docs/html
9 12
 files/*.gz
10 13
 files/*.qcow2
11 14
 files/images
12 15
 files/pip-*
13 16
 files/get-pip.py
14
-stack-screenrc
15
-*.pem
16
-accrc
17
-.stackenv
18
-.prereqs
19
-devstack-docs-*
20
-docs/
21
-docs-files
22
-.localrc.auto
23 17
 local.conf
18
+local.sh
19
+localrc
20
+proto
21
+shocco
22
+src
23
+stack-screenrc
24 24
new file mode 100644
... ...
@@ -0,0 +1,616 @@
0
+article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
1
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
2
+audio:not([controls]){display:none;}
3
+html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
4
+a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
5
+a:hover,a:active{outline:0;}
6
+sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
7
+sup{top:-0.5em;}
8
+sub{bottom:-0.25em;}
9
+img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
10
+button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
11
+button,input{*overflow:visible;line-height:normal;}
12
+button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
13
+button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
14
+input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
15
+input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
16
+textarea{overflow:auto;vertical-align:top;}
17
+body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;}
18
+a{color:#0088cc;text-decoration:none;}
19
+a:hover{color:#005580;text-decoration:underline;}
20
+.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";}
21
+.row:after{clear:both;}
22
+[class*="span"]{float:left;margin-left:20px;}
23
+.span1{width:60px;}
24
+.span2{width:140px;}
25
+.span3{width:220px;}
26
+.span4{width:300px;}
27
+.span5{width:380px;}
28
+.span6{width:460px;}
29
+.span7{width:540px;}
30
+.span8{width:620px;}
31
+.span9{width:700px;}
32
+.span10{width:780px;}
33
+.span11{width:860px;}
34
+.span12,.container{width:940px;}
35
+.offset1{margin-left:100px;}
36
+.offset2{margin-left:180px;}
37
+.offset3{margin-left:260px;}
38
+.offset4{margin-left:340px;}
39
+.offset5{margin-left:420px;}
40
+.offset6{margin-left:500px;}
41
+.offset7{margin-left:580px;}
42
+.offset8{margin-left:660px;}
43
+.offset9{margin-left:740px;}
44
+.offset10{margin-left:820px;}
45
+.offset11{margin-left:900px;}
46
+.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";}
47
+.row-fluid:after{clear:both;}
48
+.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;}
49
+.row-fluid>[class*="span"]:first-child{margin-left:0;}
50
+.row-fluid .span1{width:6.382978723%;}
51
+.row-fluid .span2{width:14.89361702%;}
52
+.row-fluid .span3{width:23.404255317%;}
53
+.row-fluid .span4{width:31.914893614%;}
54
+.row-fluid .span5{width:40.425531911%;}
55
+.row-fluid .span6{width:48.93617020799999%;}
56
+.row-fluid .span7{width:57.446808505%;}
57
+.row-fluid .span8{width:65.95744680199999%;}
58
+.row-fluid .span9{width:74.468085099%;}
59
+.row-fluid .span10{width:82.97872339599999%;}
60
+.row-fluid .span11{width:91.489361693%;}
61
+.row-fluid .span12{width:99.99999998999999%;}
62
+.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";}
63
+.container:after{clear:both;}
64
+.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";}
65
+.container-fluid:after{clear:both;}
66
+p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;}
67
+.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;}
68
+h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
69
+h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;}
70
+h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;}
71
+h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;}
72
+h4,h5,h6{line-height:18px;}
73
+h4{font-size:14px;}h4 small{font-size:12px;}
74
+h5{font-size:12px;}
75
+h6{font-size:11px;color:#999999;text-transform:uppercase;}
76
+.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;}
77
+.page-header h1{line-height:1;}
78
+ul,ol{padding:0;margin:0 0 9px 25px;}
79
+ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
80
+ul{list-style:disc;}
81
+ol{list-style:decimal;}
82
+li{line-height:18px;}
83
+ul.unstyled{margin-left:0;list-style:none;}
84
+dl{margin-bottom:18px;}
85
+dt,dd{line-height:18px;}
86
+dt{font-weight:bold;}
87
+dd{margin-left:9px;}
88
+hr{margin:18px 0;border:0;border-top:1px solid #e5e5e5;border-bottom:1px solid #ffffff;}
89
+strong{font-weight:bold;}
90
+em{font-style:italic;}
91
+.muted{color:#999999;}
92
+abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;}
93
+blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;}
94
+blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
95
+blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
96
+q:before,q:after,blockquote:before,blockquote:after{content:"";}
97
+address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;}
98
+small{font-size:100%;}
99
+cite{font-style:normal;}
100
+code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
101
+code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;}
102
+pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;}pre.prettyprint{margin-bottom:18px;}
103
+pre code{padding:0;background-color:transparent;}
104
+form{margin:0 0 18px;}
105
+fieldset{padding:0;margin:0;border:0;}
106
+legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}
107
+label,input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;}
108
+label{display:block;margin-bottom:5px;color:#333333;}
109
+input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
110
+.uneditable-textarea{width:auto;height:auto;}
111
+label input,label textarea,label select{display:block;}
112
+input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:0;cursor:pointer;border-radius:0 \0/;}
113
+input[type="file"]{padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
114
+input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;}
115
+select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;}
116
+select{width:220px;background-color:#ffffff;}
117
+select[multiple],select[size]{height:auto;}
118
+input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
119
+textarea{height:auto;}
120
+input[type="hidden"]{display:none;}
121
+.radio,.checkbox{padding-left:18px;}
122
+.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;}
123
+.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;}
124
+.radio.inline,.checkbox.inline{display:inline-block;margin-bottom:0;vertical-align:middle;}
125
+.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;}
126
+.controls>.radio.inline:first-child,.controls>.checkbox.inline:first-child{padding-top:0;}
127
+input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;}
128
+input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;}
129
+input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
130
+.input-mini{width:60px;}
131
+.input-small{width:90px;}
132
+.input-medium{width:150px;}
133
+.input-large{width:210px;}
134
+.input-xlarge{width:270px;}
135
+.input-xxlarge{width:530px;}
136
+input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;}
137
+input.span1,textarea.span1,.uneditable-input.span1{width:50px;}
138
+input.span2,textarea.span2,.uneditable-input.span2{width:130px;}
139
+input.span3,textarea.span3,.uneditable-input.span3{width:210px;}
140
+input.span4,textarea.span4,.uneditable-input.span4{width:290px;}
141
+input.span5,textarea.span5,.uneditable-input.span5{width:370px;}
142
+input.span6,textarea.span6,.uneditable-input.span6{width:450px;}
143
+input.span7,textarea.span7,.uneditable-input.span7{width:530px;}
144
+input.span8,textarea.span8,.uneditable-input.span8{width:610px;}
145
+input.span9,textarea.span9,.uneditable-input.span9{width:690px;}
146
+input.span10,textarea.span10,.uneditable-input.span10{width:770px;}
147
+input.span11,textarea.span11,.uneditable-input.span11{width:850px;}
148
+input.span12,textarea.span12,.uneditable-input.span12{width:930px;}
149
+input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;}
150
+.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;}
151
+.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;}
152
+.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;}
153
+.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;}
154
+.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;}
155
+.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;}
156
+.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}
157
+.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;}
158
+.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;}
159
+input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
160
+.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;}
161
+.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
162
+:-moz-placeholder{color:#999999;}
163
+::-webkit-input-placeholder{color:#999999;}
164
+.help-block{margin-top:5px;margin-bottom:0;color:#999999;}
165
+.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;}
166
+.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";}
167
+.input-prepend:after,.input-append:after{clear:both;}
168
+.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;}
169
+.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;}
170
+.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
171
+.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;}
172
+.input-prepend .add-on{*margin-top:1px;}
173
+.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
174
+.input-append .uneditable-input{border-right-color:#ccc;}
175
+.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
176
+.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;}
177
+.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;}
178
+.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;}
179
+.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;}
180
+.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;}
181
+.control-group{margin-bottom:9px;}
182
+.form-horizontal legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;}
183
+.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";}
184
+.form-horizontal .control-group:after{clear:both;}
185
+.form-horizontal .control-group>label{float:left;width:140px;padding-top:5px;text-align:right;}
186
+.form-horizontal .controls{margin-left:160px;}
187
+.form-horizontal .form-actions{padding-left:160px;}
188
+table{max-width:100%;border-collapse:collapse;border-spacing:0;}
189
+.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;border-top:1px solid #ddd;}
190
+.table th{font-weight:bold;vertical-align:bottom;}
191
+.table td{vertical-align:top;}
192
+.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;}
193
+.table tbody+tbody{border-top:2px solid #ddd;}
194
+.table-condensed th,.table-condensed td{padding:4px 5px;}
195
+.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;}
196
+.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
197
+.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
198
+.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
199
+.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
200
+.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
201
+.table-striped tbody tr:nth-child(even) td,.table-striped tbody tr:nth-child(even) th{background-color:#f1f1f1;}
202
+table .span1{float:none;width:44px;margin-left:0;}
203
+table .span2{float:none;width:124px;margin-left:0;}
204
+table .span3{float:none;width:204px;margin-left:0;}
205
+table .span4{float:none;width:284px;margin-left:0;}
206
+table .span5{float:none;width:364px;margin-left:0;}
207
+table .span6{float:none;width:444px;margin-left:0;}
208
+table .span7{float:none;width:524px;margin-left:0;}
209
+table .span8{float:none;width:604px;margin-left:0;}
210
+table .span9{float:none;width:684px;margin-left:0;}
211
+table .span10{float:none;width:764px;margin-left:0;}
212
+table .span11{float:none;width:844px;margin-left:0;}
213
+table .span12{float:none;width:924px;margin-left:0;}
214
+[class^="icon-"]{display:inline-block;width:14px;height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child{*margin-left:0;}
215
+.icon-white{background-image:url(../img/glyphicons-halflings-white.png);}
216
+.icon-glass{background-position:0 0;}
217
+.icon-music{background-position:-24px 0;}
218
+.icon-search{background-position:-48px 0;}
219
+.icon-envelope{background-position:-72px 0;}
220
+.icon-heart{background-position:-96px 0;}
221
+.icon-star{background-position:-120px 0;}
222
+.icon-star-empty{background-position:-144px 0;}
223
+.icon-user{background-position:-168px 0;}
224
+.icon-film{background-position:-192px 0;}
225
+.icon-th-large{background-position:-216px 0;}
226
+.icon-th{background-position:-240px 0;}
227
+.icon-th-list{background-position:-264px 0;}
228
+.icon-ok{background-position:-288px 0;}
229
+.icon-remove{background-position:-312px 0;}
230
+.icon-zoom-in{background-position:-336px 0;}
231
+.icon-zoom-out{background-position:-360px 0;}
232
+.icon-off{background-position:-384px 0;}
233
+.icon-signal{background-position:-408px 0;}
234
+.icon-cog{background-position:-432px 0;}
235
+.icon-trash{background-position:-456px 0;}
236
+.icon-home{background-position:0 -24px;}
237
+.icon-file{background-position:-24px -24px;}
238
+.icon-time{background-position:-48px -24px;}
239
+.icon-road{background-position:-72px -24px;}
240
+.icon-download-alt{background-position:-96px -24px;}
241
+.icon-download{background-position:-120px -24px;}
242
+.icon-upload{background-position:-144px -24px;}
243
+.icon-inbox{background-position:-168px -24px;}
244
+.icon-play-circle{background-position:-192px -24px;}
245
+.icon-repeat{background-position:-216px -24px;}
246
+.icon-refresh{background-position:-240px -24px;}
247
+.icon-list-alt{background-position:-264px -24px;}
248
+.icon-lock{background-position:-287px -24px;}
249
+.icon-flag{background-position:-312px -24px;}
250
+.icon-headphones{background-position:-336px -24px;}
251
+.icon-volume-off{background-position:-360px -24px;}
252
+.icon-volume-down{background-position:-384px -24px;}
253
+.icon-volume-up{background-position:-408px -24px;}
254
+.icon-qrcode{background-position:-432px -24px;}
255
+.icon-barcode{background-position:-456px -24px;}
256
+.icon-tag{background-position:0 -48px;}
257
+.icon-tags{background-position:-25px -48px;}
258
+.icon-book{background-position:-48px -48px;}
259
+.icon-bookmark{background-position:-72px -48px;}
260
+.icon-print{background-position:-96px -48px;}
261
+.icon-camera{background-position:-120px -48px;}
262
+.icon-font{background-position:-144px -48px;}
263
+.icon-bold{background-position:-167px -48px;}
264
+.icon-italic{background-position:-192px -48px;}
265
+.icon-text-height{background-position:-216px -48px;}
266
+.icon-text-width{background-position:-240px -48px;}
267
+.icon-align-left{background-position:-264px -48px;}
268
+.icon-align-center{background-position:-288px -48px;}
269
+.icon-align-right{background-position:-312px -48px;}
270
+.icon-align-justify{background-position:-336px -48px;}
271
+.icon-list{background-position:-360px -48px;}
272
+.icon-indent-left{background-position:-384px -48px;}
273
+.icon-indent-right{background-position:-408px -48px;}
274
+.icon-facetime-video{background-position:-432px -48px;}
275
+.icon-picture{background-position:-456px -48px;}
276
+.icon-pencil{background-position:0 -72px;}
277
+.icon-map-marker{background-position:-24px -72px;}
278
+.icon-adjust{background-position:-48px -72px;}
279
+.icon-tint{background-position:-72px -72px;}
280
+.icon-edit{background-position:-96px -72px;}
281
+.icon-share{background-position:-120px -72px;}
282
+.icon-check{background-position:-144px -72px;}
283
+.icon-move{background-position:-168px -72px;}
284
+.icon-step-backward{background-position:-192px -72px;}
285
+.icon-fast-backward{background-position:-216px -72px;}
286
+.icon-backward{background-position:-240px -72px;}
287
+.icon-play{background-position:-264px -72px;}
288
+.icon-pause{background-position:-288px -72px;}
289
+.icon-stop{background-position:-312px -72px;}
290
+.icon-forward{background-position:-336px -72px;}
291
+.icon-fast-forward{background-position:-360px -72px;}
292
+.icon-step-forward{background-position:-384px -72px;}
293
+.icon-eject{background-position:-408px -72px;}
294
+.icon-chevron-left{background-position:-432px -72px;}
295
+.icon-chevron-right{background-position:-456px -72px;}
296
+.icon-plus-sign{background-position:0 -96px;}
297
+.icon-minus-sign{background-position:-24px -96px;}
298
+.icon-remove-sign{background-position:-48px -96px;}
299
+.icon-ok-sign{background-position:-72px -96px;}
300
+.icon-question-sign{background-position:-96px -96px;}
301
+.icon-info-sign{background-position:-120px -96px;}
302
+.icon-screenshot{background-position:-144px -96px;}
303
+.icon-remove-circle{background-position:-168px -96px;}
304
+.icon-ok-circle{background-position:-192px -96px;}
305
+.icon-ban-circle{background-position:-216px -96px;}
306
+.icon-arrow-left{background-position:-240px -96px;}
307
+.icon-arrow-right{background-position:-264px -96px;}
308
+.icon-arrow-up{background-position:-289px -96px;}
309
+.icon-arrow-down{background-position:-312px -96px;}
310
+.icon-share-alt{background-position:-336px -96px;}
311
+.icon-resize-full{background-position:-360px -96px;}
312
+.icon-resize-small{background-position:-384px -96px;}
313
+.icon-plus{background-position:-408px -96px;}
314
+.icon-minus{background-position:-433px -96px;}
315
+.icon-asterisk{background-position:-456px -96px;}
316
+.icon-exclamation-sign{background-position:0 -120px;}
317
+.icon-gift{background-position:-24px -120px;}
318
+.icon-leaf{background-position:-48px -120px;}
319
+.icon-fire{background-position:-72px -120px;}
320
+.icon-eye-open{background-position:-96px -120px;}
321
+.icon-eye-close{background-position:-120px -120px;}
322
+.icon-warning-sign{background-position:-144px -120px;}
323
+.icon-plane{background-position:-168px -120px;}
324
+.icon-calendar{background-position:-192px -120px;}
325
+.icon-random{background-position:-216px -120px;}
326
+.icon-comment{background-position:-240px -120px;}
327
+.icon-magnet{background-position:-264px -120px;}
328
+.icon-chevron-up{background-position:-288px -120px;}
329
+.icon-chevron-down{background-position:-313px -119px;}
330
+.icon-retweet{background-position:-336px -120px;}
331
+.icon-shopping-cart{background-position:-360px -120px;}
332
+.icon-folder-close{background-position:-384px -120px;}
333
+.icon-folder-open{background-position:-408px -120px;}
334
+.icon-resize-vertical{background-position:-432px -119px;}
335
+.icon-resize-horizontal{background-position:-456px -118px;}
336
+.dropdown{position:relative;}
337
+.dropdown-toggle{*margin-bottom:-3px;}
338
+.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
339
+.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";}
340
+.dropdown .caret{margin-top:8px;margin-left:2px;}
341
+.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);}
342
+.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;max-width:220px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;}
343
+.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;}
344
+.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;}
345
+.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;}
346
+.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
347
+.dropdown.open .dropdown-menu{display:block;}
348
+.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
349
+.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
350
+.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
351
+.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;}
352
+.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;}
353
+.btn{display:inline-block;padding:4px 10px 4px;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:first-child{*margin-left:0;}
354
+.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
355
+.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
356
+.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;color:rgba(0, 0, 0, 0.5);outline:0;}
357
+.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
358
+.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
359
+.btn-large .icon{margin-top:1px;}
360
+.btn-small{padding:5px 9px;font-size:11px;line-height:16px;}
361
+.btn-small .icon{margin-top:-1px;}
362
+.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;}
363
+.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active{color:rgba(255, 255, 255, 0.75);}
364
+.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;}
365
+.btn-primary:active,.btn-primary.active{background-color:#003399 \9;}
366
+.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;}
367
+.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
368
+.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;}
369
+.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
370
+.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;}
371
+.btn-success:active,.btn-success.active{background-color:#408140 \9;}
372
+.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;}
373
+.btn-info:active,.btn-info.active{background-color:#24748c \9;}
374
+button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
375
+button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;}
376
+button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;}
377
+.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";}
378
+.btn-group:after{clear:both;}
379
+.btn-group:first-child{*margin-left:0;}
380
+.btn-group+.btn-group{margin-left:5px;}
381
+.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;}
382
+.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
383
+.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
384
+.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
385
+.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
386
+.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
387
+.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;}
388
+.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
389
+.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;}
390
+.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
391
+.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);}
392
+.btn .caret{margin-top:7px;margin-left:0;}
393
+.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);}
394
+.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);}
395
+.btn-small .caret{margin-top:4px;}
396
+.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
397
+.alert,.alert-heading{color:#c09853;}
398
+.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;}
399
+.alert-success{background-color:#dff0d8;border-color:#d6e9c6;}
400
+.alert-success,.alert-success .alert-heading{color:#468847;}
401
+.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;}
402
+.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;}
403
+.alert-info{background-color:#d9edf7;border-color:#bce8f1;}
404
+.alert-info,.alert-info .alert-heading{color:#3a87ad;}
405
+.alert-block{padding-top:14px;padding-bottom:14px;}
406
+.alert-block>p,.alert-block>ul{margin-bottom:0;}
407
+.alert-block p+p{margin-top:5px;}
408
+.nav{margin-left:0;margin-bottom:18px;list-style:none;}
409
+.nav>li>a{display:block;}
410
+.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;}
411
+.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;}
412
+.nav-list>li>a,.nav-list .nav-header{display:block;padding:3px 15px;margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
413
+.nav-list .nav-header{font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-transform:uppercase;}
414
+.nav-list>li+.nav-header{margin-top:9px;}
415
+.nav-list .active>a{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;}
416
+.nav-list .icon{margin-right:2px;}
417
+.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
418
+.nav-tabs:after,.nav-pills:after{clear:both;}
419
+.nav-tabs>li,.nav-pills>li{float:left;}
420
+.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
421
+.nav-tabs{border-bottom:1px solid #ddd;}
422
+.nav-tabs>li{margin-bottom:-1px;}
423
+.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;}
424
+.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
425
+.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
426
+.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;}
427
+.nav-stacked>li{float:none;}
428
+.nav-stacked>li>a{margin-right:0;}
429
+.nav-tabs.nav-stacked{border-bottom:0;}
430
+.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
431
+.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
432
+.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
433
+.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;}
434
+.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
435
+.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
436
+.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;}
437
+.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
438
+.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;}
439
+.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;}
440
+.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;}
441
+.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;}
442
+.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;}
443
+.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);}
444
+.tabs-stacked .open>a:hover{border-color:#999999;}
445
+.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";}
446
+.tabbable:after{clear:both;}
447
+.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;}
448
+.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
449
+.tab-content>.active,.pill-content>.active{display:block;}
450
+.tabs-below .nav-tabs{border-top:1px solid #ddd;}
451
+.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;}
452
+.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;}
453
+.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;}
454
+.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;}
455
+.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
456
+.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
457
+.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
458
+.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
459
+.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
460
+.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
461
+.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
462
+.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
463
+.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
464
+.navbar{overflow:visible;margin-bottom:18px;}
465
+.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
466
+.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;}
467
+.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;}
468
+.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
469
+.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
470
+.nav-collapse.collapse{height:auto;}
471
+.navbar .brand:hover{text-decoration:none;}
472
+.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;}
473
+.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;}
474
+.navbar .btn,.navbar .btn-group{margin-top:5px;}
475
+.navbar .btn-group .btn{margin-top:0;}
476
+.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";}
477
+.navbar-form:after{clear:both;}
478
+.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;}
479
+.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;}
480
+.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
481
+.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;}
482
+.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;}
483
+.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);}
484
+.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
485
+.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;}
486
+.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
487
+.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
488
+.navbar .nav.pull-right{float:right;}
489
+.navbar .nav>li{display:block;float:left;}
490
+.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
491
+.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;}
492
+.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;background-color:rgba(0, 0, 0, 0.5);}
493
+.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;}
494
+.navbar .nav.pull-right{margin-left:10px;margin-right:0;}
495
+.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
496
+.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
497
+.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;}
498
+.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);}
499
+.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;}
500
+.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;}
501
+.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;}
502
+.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;}
503
+.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;}
504
+.breadcrumb .divider{padding:0 5px;color:#999999;}
505
+.breadcrumb .active a{color:#333333;}
506
+.pagination{height:36px;margin:18px 0;}
507
+.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
508
+.pagination li{display:inline;}
509
+.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;}
510
+.pagination a:hover,.pagination .active a{background-color:#f5f5f5;}
511
+.pagination .active a{color:#999999;cursor:default;}
512
+.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;}
513
+.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
514
+.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
515
+.pagination-centered{text-align:center;}
516
+.pagination-right{text-align:right;}
517
+.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";}
518
+.pager:after{clear:both;}
519
+.pager li{display:inline;}
520
+.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
521
+.pager a:hover{text-decoration:none;background-color:#f5f5f5;}
522
+.pager .next a{float:right;}
523
+.pager .previous a{float:left;}
524
+.modal-open .dropdown-menu{z-index:2050;}
525
+.modal-open .dropdown.open{*z-index:2050;}
526
+.modal-open .popover{z-index:2060;}
527
+.modal-open .tooltip{z-index:2070;}
528
+.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
529
+.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);}
530
+.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
531
+.modal.fade.in{top:50%;}
532
+.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
533
+.modal-body{padding:15px;}
534
+.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";}
535
+.modal-footer:after{clear:both;}
536
+.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;}
537
+.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
538
+.tooltip.top{margin-top:-2px;}
539
+.tooltip.right{margin-left:2px;}
540
+.tooltip.bottom{margin-top:2px;}
541
+.tooltip.left{margin-left:-2px;}
542
+.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
543
+.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
544
+.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
545
+.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
546
+.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
547
+.tooltip-arrow{position:absolute;width:0;height:0;}
548
+.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;}
549
+.popover.right{margin-left:5px;}
550
+.popover.bottom{margin-top:5px;}
551
+.popover.left{margin-left:-5px;}
552
+.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
553
+.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
554
+.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
555
+.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
556
+.popover .arrow{position:absolute;width:0;height:0;}
557
+.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
558
+.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;}
559
+.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;}
560
+.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";}
561
+.thumbnails:after{clear:both;}
562
+.thumbnails>li{float:left;margin:0 0 18px 20px;}
563
+.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}
564
+a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
565
+.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;}
566
+.thumbnail .caption{padding:9px;}
567
+.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
568
+.label-important{background-color:#b94a48;}
569
+.label-warning{background-color:#f89406;}
570
+.label-success{background-color:#468847;}
571
+.label-info{background-color:#3a87ad;}
572
+@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
573
+.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
574
+.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-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);background-image:-ms-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);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
575
+.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;}
576
+.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);}
577
+.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-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);background-image:-ms-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);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);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);}
578
+.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);}
579
+.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-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);background-image:-ms-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);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);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);}
580
+.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);}
581
+.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-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);background-image:-ms-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);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);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);}
582
+.accordion{margin-bottom:18px;}
583
+.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
584
+.accordion-heading{border-bottom:0;}
585
+.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
586
+.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
587
+.carousel{position:relative;margin-bottom:18px;line-height:1;}
588
+.carousel-inner{overflow:hidden;width:100%;position:relative;}
589
+.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}
590
+.carousel .item>img{display:block;line-height:1;}
591
+.carousel .active,.carousel .next,.carousel .prev{display:block;}
592
+.carousel .active{left:0;}
593
+.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;}
594
+.carousel .next{left:100%;}
595
+.carousel .prev{left:-100%;}
596
+.carousel .next.left,.carousel .prev.right{left:0;}
597
+.carousel .active.left{left:-100%;}
598
+.carousel .active.right{left:100%;}
599
+.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
600
+.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);}
601
+.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);}
602
+.carousel-caption h4,.carousel-caption p{color:#ffffff;}
603
+.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;}
604
+.hero-unit p{font-size:18px;font-weight:200;line-height:27px;}
605
+.pull-right{float:right;}
606
+.pull-left{float:left;}
607
+.hide{display:none;}
608
+.show{display:block;}
609
+.invisible{visibility:hidden;}
610
+
611
+
612
+/* Responsive css */
613
+
614
+/*.hidden{display:none;visibility:hidden;}*/
615
+/*@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:768px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:980px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.801104972%;} .row-fluid .span2{width:14.364640883%;} .row-fluid .span3{width:22.928176794%;} .row-fluid .span4{width:31.491712705%;} .row-fluid .span5{width:40.055248616%;} .row-fluid .span6{width:48.618784527%;} .row-fluid .span7{width:57.182320438000005%;} .row-fluid .span8{width:65.74585634900001%;} .row-fluid .span9{width:74.30939226%;} .row-fluid .span10{width:82.87292817100001%;} .row-fluid .span11{width:91.436464082%;} .row-fluid .span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:980px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.982905983%;} .row-fluid .span2{width:14.529914530000001%;} .row-fluid .span3{width:23.076923077%;} .row-fluid .span4{width:31.623931624%;} .row-fluid .span5{width:40.170940171000005%;} .row-fluid .span6{width:48.717948718%;} .row-fluid .span7{width:57.264957265%;} .row-fluid .span8{width:65.81196581200001%;} .row-fluid .span9{width:74.358974359%;} .row-fluid .span10{width:82.905982906%;} .row-fluid .span11{width:91.45299145300001%;} .row-fluid .span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}}*/
0 616
new file mode 100644
... ...
@@ -0,0 +1,122 @@
0
+
1
+a.brand {
2
+	background: url(../images/small_logo.png) no-repeat left 6px;
3
+	width: 166px;
4
+	text-indent: -9999px;
5
+}
6
+
7
+code {
8
+  background-color: #ffffff;
9
+}
10
+
11
+#home .hero-unit {
12
+  background: url(../images/header_bg.png) top left repeat-x;
13
+	color: #fff;
14
+	padding-left: 25px;
15
+	padding-right: 25px;
16
+	height: 161px;
17
+}
18
+
19
+#home .hero-unit {
20
+	margin-right: ;
21
+}
22
+
23
+h1#main_header {
24
+	background: url(../images/logo.png) top left no-repeat;
25
+	text-indent: -9999px;
26
+}
27
+
28
+.sub_header {
29
+	font-size: 12px;
30
+	font-family: "anivers";
31
+	font-weight: normal;
32
+	width: 420px;
33
+}
34
+
35
+#home .hero-unit a {
36
+	color: #fff;
37
+	text-decoration: underline;
38
+}
39
+
40
+.clear {
41
+	clear: both;
42
+}
43
+
44
+ol#getting_started {
45
+	list-style: none;
46
+	width: 396px;
47
+	margin-top: -45px;
48
+	margin-right: 0;
49
+	margin-left: 72px;
50
+}
51
+
52
+ol#getting_started li {
53
+	background: url(../images/quickstart.png) top left no-repeat;
54
+}
55
+
56
+ol#getting_started li pre {
57
+	font-size: 11px;
58
+	padding: 5px;
59
+	background: #4d7ead;
60
+	border-color: #2c5d8d;
61
+	color: #fff;
62
+	overflow: auto;
63
+}
64
+
65
+li#ubuntu {
66
+	height: 46px;
67
+	padding: ;
68
+	padding-left: 82px;
69
+	padding-top: 27px;
70
+	margin-bottom: 14px;
71
+}
72
+
73
+li#github {
74
+	background-position: left -70px !important;
75
+	height: 61px;
76
+	padding: ;
77
+	padding-left: 82px;
78
+	padding-top: 4px;
79
+	margin-bottom: 25px;
80
+}
81
+
82
+
83
+li#install {
84
+	background-position: left bottom !important;
85
+	height: 61px;
86
+	padding: ;
87
+	padding-left: 82px;
88
+	padding-top: 4px;
89
+	margin-bottom: 25px;
90
+}
91
+
92
+h2 small {
93
+	font-size: 12px;
94
+	font-style: italic;
95
+}
96
+
97
+.container section {
98
+	margin-bottom: 25px;
99
+}
100
+
101
+
102
+thead, tfoot{
103
+	background: #ededed;
104
+	color: #444444;
105
+}
106
+
107
+table {
108
+	color: #444;
109
+}
110
+a.table-action {
111
+	display: block;
112
+	width: 45px;
113
+}
114
+
115
+footer {
116
+	clear: both;
117
+}
118
+
119
+.wat {
120
+	margin-top: 33px;
121
+}
0 122
\ No newline at end of file
1 123
new file mode 100644
2 124
Binary files /dev/null and b/docs/source/assets/images/devstack.png differ
3 125
new file mode 100644
4 126
Binary files /dev/null and b/docs/source/assets/images/header_bg.png differ
5 127
new file mode 100644
6 128
Binary files /dev/null and b/docs/source/assets/images/logo.png differ
7 129
new file mode 100644
8 130
Binary files /dev/null and b/docs/source/assets/images/quickstart.png differ
9 131
new file mode 100644
10 132
Binary files /dev/null and b/docs/source/assets/images/small_logo.png differ
11 133
new file mode 100644
... ...
@@ -0,0 +1,1722 @@
0
+/* ===================================================
1
+ * bootstrap-transition.js v2.0.0
2
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
3
+ * ===================================================
4
+ * Copyright 2012 Twitter, Inc.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ * ========================================================== */
18
+
19
+!function( $ ) {
20
+
21
+  $(function () {
22
+
23
+    "use strict"
24
+
25
+    /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+     * ======================================================= */
27
+
28
+    $.support.transition = (function () {
29
+      var thisBody = document.body || document.documentElement
30
+        , thisStyle = thisBody.style
31
+        , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
32
+
33
+      return support && {
34
+        end: (function () {
35
+          var transitionEnd = "TransitionEnd"
36
+          if ( $.browser.webkit ) {
37
+          	transitionEnd = "webkitTransitionEnd"
38
+          } else if ( $.browser.mozilla ) {
39
+          	transitionEnd = "transitionend"
40
+          } else if ( $.browser.opera ) {
41
+          	transitionEnd = "oTransitionEnd"
42
+          }
43
+          return transitionEnd
44
+        }())
45
+      }
46
+    })()
47
+
48
+  })
49
+  
50
+}( window.jQuery )
51
+/* ==========================================================
52
+ * bootstrap-alert.js v2.0.0
53
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
54
+ * ==========================================================
55
+ * Copyright 2012 Twitter, Inc.
56
+ *
57
+ * Licensed under the Apache License, Version 2.0 (the "License");
58
+ * you may not use this file except in compliance with the License.
59
+ * You may obtain a copy of the License at
60
+ *
61
+ * http://www.apache.org/licenses/LICENSE-2.0
62
+ *
63
+ * Unless required by applicable law or agreed to in writing, software
64
+ * distributed under the License is distributed on an "AS IS" BASIS,
65
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66
+ * See the License for the specific language governing permissions and
67
+ * limitations under the License.
68
+ * ========================================================== */
69
+
70
+
71
+!function( $ ){
72
+
73
+  "use strict"
74
+
75
+ /* ALERT CLASS DEFINITION
76
+  * ====================== */
77
+
78
+  var dismiss = '[data-dismiss="alert"]'
79
+    , Alert = function ( el ) {
80
+        $(el).on('click', dismiss, this.close)
81
+      }
82
+
83
+  Alert.prototype = {
84
+
85
+    constructor: Alert
86
+
87
+  , close: function ( e ) {
88
+      var $this = $(this)
89
+        , selector = $this.attr('data-target')
90
+        , $parent
91
+
92
+      if (!selector) {
93
+        selector = $this.attr('href')
94
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
95
+      }
96
+
97
+      $parent = $(selector)
98
+      $parent.trigger('close')
99
+
100
+      e && e.preventDefault()
101
+
102
+      $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
103
+
104
+      $parent.removeClass('in')
105
+
106
+      function removeElement() {
107
+        $parent.remove()
108
+        $parent.trigger('closed')
109
+      }
110
+
111
+      $.support.transition && $parent.hasClass('fade') ?
112
+        $parent.on($.support.transition.end, removeElement) :
113
+        removeElement()
114
+    }
115
+
116
+  }
117
+
118
+
119
+ /* ALERT PLUGIN DEFINITION
120
+  * ======================= */
121
+
122
+  $.fn.alert = function ( option ) {
123
+    return this.each(function () {
124
+      var $this = $(this)
125
+        , data = $this.data('alert')
126
+      if (!data) $this.data('alert', (data = new Alert(this)))
127
+      if (typeof option == 'string') data[option].call($this)
128
+    })
129
+  }
130
+
131
+  $.fn.alert.Constructor = Alert
132
+
133
+
134
+ /* ALERT DATA-API
135
+  * ============== */
136
+
137
+  $(function () {
138
+    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
139
+  })
140
+
141
+}( window.jQuery )
142
+/* ============================================================
143
+ * bootstrap-button.js v2.0.0
144
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
145
+ * ============================================================
146
+ * Copyright 2012 Twitter, Inc.
147
+ *
148
+ * Licensed under the Apache License, Version 2.0 (the "License");
149
+ * you may not use this file except in compliance with the License.
150
+ * You may obtain a copy of the License at
151
+ *
152
+ * http://www.apache.org/licenses/LICENSE-2.0
153
+ *
154
+ * Unless required by applicable law or agreed to in writing, software
155
+ * distributed under the License is distributed on an "AS IS" BASIS,
156
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
157
+ * See the License for the specific language governing permissions and
158
+ * limitations under the License.
159
+ * ============================================================ */
160
+
161
+!function( $ ){
162
+
163
+  "use strict"
164
+
165
+ /* BUTTON PUBLIC CLASS DEFINITION
166
+  * ============================== */
167
+
168
+  var Button = function ( element, options ) {
169
+    this.$element = $(element)
170
+    this.options = $.extend({}, $.fn.button.defaults, options)
171
+  }
172
+
173
+  Button.prototype = {
174
+
175
+      constructor: Button
176
+
177
+    , setState: function ( state ) {
178
+        var d = 'disabled'
179
+          , $el = this.$element
180
+          , data = $el.data()
181
+          , val = $el.is('input') ? 'val' : 'html'
182
+
183
+        state = state + 'Text'
184
+        data.resetText || $el.data('resetText', $el[val]())
185
+
186
+        $el[val](data[state] || this.options[state])
187
+
188
+        // push to event loop to allow forms to submit
189
+        setTimeout(function () {
190
+          state == 'loadingText' ?
191
+            $el.addClass(d).attr(d, d) :
192
+            $el.removeClass(d).removeAttr(d)
193
+        }, 0)
194
+      }
195
+
196
+    , toggle: function () {
197
+        var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
198
+
199
+        $parent && $parent
200
+          .find('.active')
201
+          .removeClass('active')
202
+
203
+        this.$element.toggleClass('active')
204
+      }
205
+
206
+  }
207
+
208
+
209
+ /* BUTTON PLUGIN DEFINITION
210
+  * ======================== */
211
+
212
+  $.fn.button = function ( option ) {
213
+    return this.each(function () {
214
+      var $this = $(this)
215
+        , data = $this.data('button')
216
+        , options = typeof option == 'object' && option
217
+      if (!data) $this.data('button', (data = new Button(this, options)))
218
+      if (option == 'toggle') data.toggle()
219
+      else if (option) data.setState(option)
220
+    })
221
+  }
222
+
223
+  $.fn.button.defaults = {
224
+    loadingText: 'loading...'
225
+  }
226
+
227
+  $.fn.button.Constructor = Button
228
+
229
+
230
+ /* BUTTON DATA-API
231
+  * =============== */
232
+
233
+  $(function () {
234
+    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
235
+      $(e.target).button('toggle')
236
+    })
237
+  })
238
+
239
+}( window.jQuery )
240
+/* ==========================================================
241
+ * bootstrap-carousel.js v2.0.0
242
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
243
+ * ==========================================================
244
+ * Copyright 2012 Twitter, Inc.
245
+ *
246
+ * Licensed under the Apache License, Version 2.0 (the "License");
247
+ * you may not use this file except in compliance with the License.
248
+ * You may obtain a copy of the License at
249
+ *
250
+ * http://www.apache.org/licenses/LICENSE-2.0
251
+ *
252
+ * Unless required by applicable law or agreed to in writing, software
253
+ * distributed under the License is distributed on an "AS IS" BASIS,
254
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
255
+ * See the License for the specific language governing permissions and
256
+ * limitations under the License.
257
+ * ========================================================== */
258
+
259
+
260
+!function( $ ){
261
+
262
+  "use strict"
263
+
264
+ /* CAROUSEL CLASS DEFINITION
265
+  * ========================= */
266
+
267
+  var Carousel = function (element, options) {
268
+    this.$element = $(element)
269
+    this.options = $.extend({}, $.fn.carousel.defaults, options)
270
+    this.options.slide && this.slide(this.options.slide)
271
+  }
272
+
273
+  Carousel.prototype = {
274
+
275
+    cycle: function () {
276
+      this.interval = setInterval($.proxy(this.next, this), this.options.interval)
277
+      return this
278
+    }
279
+
280
+  , to: function (pos) {
281
+      var $active = this.$element.find('.active')
282
+        , children = $active.parent().children()
283
+        , activePos = children.index($active)
284
+        , that = this
285
+
286
+      if (pos > (children.length - 1) || pos < 0) return
287
+
288
+      if (this.sliding) {
289
+        return this.$element.one('slid', function () {
290
+          that.to(pos)
291
+        })
292
+      }
293
+
294
+      if (activePos == pos) {
295
+        return this.pause().cycle()
296
+      }
297
+
298
+      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
299
+    }
300
+
301
+  , pause: function () {
302
+      clearInterval(this.interval)
303
+      return this
304
+    }
305
+
306
+  , next: function () {
307
+      if (this.sliding) return
308
+      return this.slide('next')
309
+    }
310
+
311
+  , prev: function () {
312
+      if (this.sliding) return
313
+      return this.slide('prev')
314
+    }
315
+
316
+  , slide: function (type, next) {
317
+      var $active = this.$element.find('.active')
318
+        , $next = next || $active[type]()
319
+        , isCycling = this.interval
320
+        , direction = type == 'next' ? 'left' : 'right'
321
+        , fallback  = type == 'next' ? 'first' : 'last'
322
+        , that = this
323
+
324
+      this.sliding = true
325
+
326
+      isCycling && this.pause()
327
+
328
+      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
329
+
330
+      if (!$.support.transition && this.$element.hasClass('slide')) {
331
+        this.$element.trigger('slide')
332
+        $active.removeClass('active')
333
+        $next.addClass('active')
334
+        this.sliding = false
335
+        this.$element.trigger('slid')
336
+      } else {
337
+        $next.addClass(type)
338
+        $next[0].offsetWidth // force reflow
339
+        $active.addClass(direction)
340
+        $next.addClass(direction)
341
+        this.$element.trigger('slide')
342
+        this.$element.one($.support.transition.end, function () {
343
+          $next.removeClass([type, direction].join(' ')).addClass('active')
344
+          $active.removeClass(['active', direction].join(' '))
345
+          that.sliding = false
346
+          setTimeout(function () { that.$element.trigger('slid') }, 0)
347
+        })
348
+      }
349
+
350
+      isCycling && this.cycle()
351
+
352
+      return this
353
+    }
354
+
355
+  }
356
+
357
+
358
+ /* CAROUSEL PLUGIN DEFINITION
359
+  * ========================== */
360
+
361
+  $.fn.carousel = function ( option ) {
362
+    return this.each(function () {
363
+      var $this = $(this)
364
+        , data = $this.data('carousel')
365
+        , options = typeof option == 'object' && option
366
+      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
367
+      if (typeof option == 'number') data.to(option)
368
+      else if (typeof option == 'string' || (option = options.slide)) data[option]()
369
+      else data.cycle()
370
+    })
371
+  }
372
+
373
+  $.fn.carousel.defaults = {
374
+    interval: 5000
375
+  }
376
+
377
+  $.fn.carousel.Constructor = Carousel
378
+
379
+
380
+ /* CAROUSEL DATA-API
381
+  * ================= */
382
+
383
+  $(function () {
384
+    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
385
+      var $this = $(this), href
386
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
387
+        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
388
+      $target.carousel(options)
389
+      e.preventDefault()
390
+    })
391
+  })
392
+
393
+}( window.jQuery )
394
+/* =============================================================
395
+ * bootstrap-collapse.js v2.0.0
396
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
397
+ * =============================================================
398
+ * Copyright 2012 Twitter, Inc.
399
+ *
400
+ * Licensed under the Apache License, Version 2.0 (the "License");
401
+ * you may not use this file except in compliance with the License.
402
+ * You may obtain a copy of the License at
403
+ *
404
+ * http://www.apache.org/licenses/LICENSE-2.0
405
+ *
406
+ * Unless required by applicable law or agreed to in writing, software
407
+ * distributed under the License is distributed on an "AS IS" BASIS,
408
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
409
+ * See the License for the specific language governing permissions and
410
+ * limitations under the License.
411
+ * ============================================================ */
412
+
413
+!function( $ ){
414
+
415
+  "use strict"
416
+
417
+  var Collapse = function ( element, options ) {
418
+  	this.$element = $(element)
419
+    this.options = $.extend({}, $.fn.collapse.defaults, options)
420
+
421
+    if (this.options["parent"]) {
422
+      this.$parent = $(this.options["parent"])
423
+    }
424
+
425
+    this.options.toggle && this.toggle()
426
+  }
427
+
428
+  Collapse.prototype = {
429
+
430
+    constructor: Collapse
431
+
432
+  , dimension: function () {
433
+      var hasWidth = this.$element.hasClass('width')
434
+      return hasWidth ? 'width' : 'height'
435
+    }
436
+
437
+  , show: function () {
438
+      var dimension = this.dimension()
439
+        , scroll = $.camelCase(['scroll', dimension].join('-'))
440
+        , actives = this.$parent && this.$parent.find('.in')
441
+        , hasData
442
+
443
+      if (actives && actives.length) {
444
+        hasData = actives.data('collapse')
445
+        actives.collapse('hide')
446
+        hasData || actives.data('collapse', null)
447
+      }
448
+
449
+      this.$element[dimension](0)
450
+      this.transition('addClass', 'show', 'shown')
451
+      this.$element[dimension](this.$element[0][scroll])
452
+
453
+    }
454
+
455
+  , hide: function () {
456
+      var dimension = this.dimension()
457
+      this.reset(this.$element[dimension]())
458
+      this.transition('removeClass', 'hide', 'hidden')
459
+      this.$element[dimension](0)
460
+    }
461
+
462
+  , reset: function ( size ) {
463
+      var dimension = this.dimension()
464
+
465
+      this.$element
466
+        .removeClass('collapse')
467
+        [dimension](size || 'auto')
468
+        [0].offsetWidth
469
+
470
+      this.$element.addClass('collapse')
471
+    }
472
+
473
+  , transition: function ( method, startEvent, completeEvent ) {
474
+      var that = this
475
+        , complete = function () {
476
+            if (startEvent == 'show') that.reset()
477
+            that.$element.trigger(completeEvent)
478
+          }
479
+
480
+      this.$element
481
+        .trigger(startEvent)
482
+        [method]('in')
483
+
484
+      $.support.transition && this.$element.hasClass('collapse') ?
485
+        this.$element.one($.support.transition.end, complete) :
486
+        complete()
487
+  	}
488
+
489
+  , toggle: function () {
490
+      this[this.$element.hasClass('in') ? 'hide' : 'show']()
491
+  	}
492
+
493
+  }
494
+
495
+  /* COLLAPSIBLE PLUGIN DEFINITION
496
+  * ============================== */
497
+
498
+  $.fn.collapse = function ( option ) {
499
+    return this.each(function () {
500
+      var $this = $(this)
501
+        , data = $this.data('collapse')
502
+        , options = typeof option == 'object' && option
503
+      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
504
+      if (typeof option == 'string') data[option]()
505
+    })
506
+  }
507
+
508
+  $.fn.collapse.defaults = {
509
+    toggle: true
510
+  }
511
+
512
+  $.fn.collapse.Constructor = Collapse
513
+
514
+
515
+ /* COLLAPSIBLE DATA-API
516
+  * ==================== */
517
+
518
+  $(function () {
519
+    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
520
+      var $this = $(this), href
521
+        , target = $this.attr('data-target')
522
+          || e.preventDefault()
523
+          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
524
+        , option = $(target).data('collapse') ? 'toggle' : $this.data()
525
+      $(target).collapse(option)
526
+    })
527
+  })
528
+
529
+}( window.jQuery )
530
+/* ============================================================
531
+ * bootstrap-dropdown.js v2.0.0
532
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
533
+ * ============================================================
534
+ * Copyright 2012 Twitter, Inc.
535
+ *
536
+ * Licensed under the Apache License, Version 2.0 (the "License");
537
+ * you may not use this file except in compliance with the License.
538
+ * You may obtain a copy of the License at
539
+ *
540
+ * http://www.apache.org/licenses/LICENSE-2.0
541
+ *
542
+ * Unless required by applicable law or agreed to in writing, software
543
+ * distributed under the License is distributed on an "AS IS" BASIS,
544
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
545
+ * See the License for the specific language governing permissions and
546
+ * limitations under the License.
547
+ * ============================================================ */
548
+
549
+
550
+!function( $ ){
551
+
552
+  "use strict"
553
+
554
+ /* DROPDOWN CLASS DEFINITION
555
+  * ========================= */
556
+
557
+  var toggle = '[data-toggle="dropdown"]'
558
+    , Dropdown = function ( element ) {
559
+        var $el = $(element).on('click.dropdown.data-api', this.toggle)
560
+        $('html').on('click.dropdown.data-api', function () {
561
+          $el.parent().removeClass('open')
562
+        })
563
+      }
564
+
565
+  Dropdown.prototype = {
566
+
567
+    constructor: Dropdown
568
+
569
+  , toggle: function ( e ) {
570
+      var $this = $(this)
571
+        , selector = $this.attr('data-target')
572
+        , $parent
573
+        , isActive
574
+
575
+      if (!selector) {
576
+        selector = $this.attr('href')
577
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
578
+      }
579
+
580
+      $parent = $(selector)
581
+      $parent.length || ($parent = $this.parent())
582
+
583
+      isActive = $parent.hasClass('open')
584
+
585
+      clearMenus()
586
+      !isActive && $parent.toggleClass('open')
587
+
588
+      return false
589
+    }
590
+
591
+  }
592
+
593
+  function clearMenus() {
594
+    $(toggle).parent().removeClass('open')
595
+  }
596
+
597
+
598
+  /* DROPDOWN PLUGIN DEFINITION
599
+   * ========================== */
600
+
601
+  $.fn.dropdown = function ( option ) {
602
+    return this.each(function () {
603
+      var $this = $(this)
604
+        , data = $this.data('dropdown')
605
+      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
606
+      if (typeof option == 'string') data[option].call($this)
607
+    })
608
+  }
609
+
610
+  $.fn.dropdown.Constructor = Dropdown
611
+
612
+
613
+  /* APPLY TO STANDARD DROPDOWN ELEMENTS
614
+   * =================================== */
615
+
616
+  $(function () {
617
+    $('html').on('click.dropdown.data-api', clearMenus)
618
+    $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
619
+  })
620
+
621
+}( window.jQuery )
622
+/* =========================================================
623
+ * bootstrap-modal.js v2.0.0
624
+ * http://twitter.github.com/bootstrap/javascript.html#modals
625
+ * =========================================================
626
+ * Copyright 2012 Twitter, Inc.
627
+ *
628
+ * Licensed under the Apache License, Version 2.0 (the "License");
629
+ * you may not use this file except in compliance with the License.
630
+ * You may obtain a copy of the License at
631
+ *
632
+ * http://www.apache.org/licenses/LICENSE-2.0
633
+ *
634
+ * Unless required by applicable law or agreed to in writing, software
635
+ * distributed under the License is distributed on an "AS IS" BASIS,
636
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
637
+ * See the License for the specific language governing permissions and
638
+ * limitations under the License.
639
+ * ========================================================= */
640
+
641
+
642
+!function( $ ){
643
+
644
+  "use strict"
645
+
646
+ /* MODAL CLASS DEFINITION
647
+  * ====================== */
648
+
649
+  var Modal = function ( content, options ) {
650
+    this.options = $.extend({}, $.fn.modal.defaults, options)
651
+    this.$element = $(content)
652
+      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
653
+  }
654
+
655
+  Modal.prototype = {
656
+
657
+      constructor: Modal
658
+
659
+    , toggle: function () {
660
+        return this[!this.isShown ? 'show' : 'hide']()
661
+      }
662
+
663
+    , show: function () {
664
+        var that = this
665
+
666
+        if (this.isShown) return
667
+
668
+        $('body').addClass('modal-open')
669
+
670
+        this.isShown = true
671
+        this.$element.trigger('show')
672
+
673
+        escape.call(this)
674
+        backdrop.call(this, function () {
675
+          var transition = $.support.transition && that.$element.hasClass('fade')
676
+
677
+          !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
678
+
679
+          that.$element
680
+            .show()
681
+
682
+          if (transition) {
683
+            that.$element[0].offsetWidth // force reflow
684
+          }
685
+
686
+          that.$element.addClass('in')
687
+
688
+          transition ?
689
+            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
690
+            that.$element.trigger('shown')
691
+
692
+        })
693
+      }
694
+
695
+    , hide: function ( e ) {
696
+        e && e.preventDefault()
697
+
698
+        if (!this.isShown) return
699
+
700
+        var that = this
701
+        this.isShown = false
702
+
703
+        $('body').removeClass('modal-open')
704
+
705
+        escape.call(this)
706
+
707
+        this.$element
708
+          .trigger('hide')
709
+          .removeClass('in')
710
+
711
+        $.support.transition && this.$element.hasClass('fade') ?
712
+          hideWithTransition.call(this) :
713
+          hideModal.call(this)
714
+      }
715
+
716
+  }
717
+
718
+
719
+ /* MODAL PRIVATE METHODS
720
+  * ===================== */
721
+
722
+  function hideWithTransition() {
723
+    var that = this
724
+      , timeout = setTimeout(function () {
725
+          that.$element.off($.support.transition.end)
726
+          hideModal.call(that)
727
+        }, 500)
728
+
729
+    this.$element.one($.support.transition.end, function () {
730
+      clearTimeout(timeout)
731
+      hideModal.call(that)
732
+    })
733
+  }
734
+
735
+  function hideModal( that ) {
736
+    this.$element
737
+      .hide()
738
+      .trigger('hidden')
739
+
740
+    backdrop.call(this)
741
+  }
742
+
743
+  function backdrop( callback ) {
744
+    var that = this
745
+      , animate = this.$element.hasClass('fade') ? 'fade' : ''
746
+
747
+    if (this.isShown && this.options.backdrop) {
748
+      var doAnimate = $.support.transition && animate
749
+
750
+      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
751
+        .appendTo(document.body)
752
+
753
+      if (this.options.backdrop != 'static') {
754
+        this.$backdrop.click($.proxy(this.hide, this))
755
+      }
756
+
757
+      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
758
+
759
+      this.$backdrop.addClass('in')
760
+
761
+      doAnimate ?
762
+        this.$backdrop.one($.support.transition.end, callback) :
763
+        callback()
764
+
765
+    } else if (!this.isShown && this.$backdrop) {
766
+      this.$backdrop.removeClass('in')
767
+
768
+      $.support.transition && this.$element.hasClass('fade')?
769
+        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
770
+        removeBackdrop.call(this)
771
+
772
+    } else if (callback) {
773
+      callback()
774
+    }
775
+  }
776
+
777
+  function removeBackdrop() {
778
+    this.$backdrop.remove()
779
+    this.$backdrop = null
780
+  }
781
+
782
+  function escape() {
783
+    var that = this
784
+    if (this.isShown && this.options.keyboard) {
785
+      $(document).on('keyup.dismiss.modal', function ( e ) {
786
+        e.which == 27 && that.hide()
787
+      })
788
+    } else if (!this.isShown) {
789
+      $(document).off('keyup.dismiss.modal')
790
+    }
791
+  }
792
+
793
+
794
+ /* MODAL PLUGIN DEFINITION
795
+  * ======================= */
796
+
797
+  $.fn.modal = function ( option ) {
798
+    return this.each(function () {
799
+      var $this = $(this)
800
+        , data = $this.data('modal')
801
+        , options = typeof option == 'object' && option
802
+      if (!data) $this.data('modal', (data = new Modal(this, options)))
803
+      if (typeof option == 'string') data[option]()
804
+      else data.show()
805
+    })
806
+  }
807
+
808
+  $.fn.modal.defaults = {
809
+      backdrop: true
810
+    , keyboard: true
811
+  }
812
+
813
+  $.fn.modal.Constructor = Modal
814
+
815
+
816
+ /* MODAL DATA-API
817
+  * ============== */
818
+
819
+  $(function () {
820
+    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
821
+      var $this = $(this), href
822
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
823
+        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
824
+
825
+      e.preventDefault()
826
+      $target.modal(option)
827
+    })
828
+  })
829
+
830
+}( window.jQuery )
831
+/* ===========================================================
832
+ * bootstrap-tooltip.js v2.0.0
833
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
834
+ * Inspired by the original jQuery.tipsy by Jason Frame
835
+ * ===========================================================
836
+ * Copyright 2012 Twitter, Inc.
837
+ *
838
+ * Licensed under the Apache License, Version 2.0 (the "License");
839
+ * you may not use this file except in compliance with the License.
840
+ * You may obtain a copy of the License at
841
+ *
842
+ * http://www.apache.org/licenses/LICENSE-2.0
843
+ *
844
+ * Unless required by applicable law or agreed to in writing, software
845
+ * distributed under the License is distributed on an "AS IS" BASIS,
846
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
847
+ * See the License for the specific language governing permissions and
848
+ * limitations under the License.
849
+ * ========================================================== */
850
+
851
+!function( $ ) {
852
+
853
+  "use strict"
854
+
855
+ /* TOOLTIP PUBLIC CLASS DEFINITION
856
+  * =============================== */
857
+
858
+  var Tooltip = function ( element, options ) {
859
+    this.init('tooltip', element, options)
860
+  }
861
+
862
+  Tooltip.prototype = {
863
+
864
+    constructor: Tooltip
865
+
866
+  , init: function ( type, element, options ) {
867
+      var eventIn
868
+        , eventOut
869
+
870
+      this.type = type
871
+      this.$element = $(element)
872
+      this.options = this.getOptions(options)
873
+      this.enabled = true
874
+
875
+      if (this.options.trigger != 'manual') {
876
+        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
877
+        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
878
+        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
879
+        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
880
+      }
881
+
882
+      this.options.selector ?
883
+        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
884
+        this.fixTitle()
885
+    }
886
+
887
+  , getOptions: function ( options ) {
888
+      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
889
+
890
+      if (options.delay && typeof options.delay == 'number') {
891
+        options.delay = {
892
+          show: options.delay
893
+        , hide: options.delay
894
+        }
895
+      }
896
+
897
+      return options
898
+    }
899
+
900
+  , enter: function ( e ) {
901
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
902
+
903
+      if (!self.options.delay || !self.options.delay.show) {
904
+        self.show()
905
+      } else {
906
+        self.hoverState = 'in'
907
+        setTimeout(function() {
908
+          if (self.hoverState == 'in') {
909
+            self.show()
910
+          }
911
+        }, self.options.delay.show)
912
+      }
913
+    }
914
+
915
+  , leave: function ( e ) {
916
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
917
+
918
+      if (!self.options.delay || !self.options.delay.hide) {
919
+        self.hide()
920
+      } else {
921
+        self.hoverState = 'out'
922
+        setTimeout(function() {
923
+          if (self.hoverState == 'out') {
924
+            self.hide()
925
+          }
926
+        }, self.options.delay.hide)
927
+      }
928
+    }
929
+
930
+  , show: function () {
931
+      var $tip
932
+        , inside
933
+        , pos
934
+        , actualWidth
935
+        , actualHeight
936
+        , placement
937
+        , tp
938
+
939
+      if (this.hasContent() && this.enabled) {
940
+        $tip = this.tip()
941
+        this.setContent()
942
+
943
+        if (this.options.animation) {
944
+          $tip.addClass('fade')
945
+        }
946
+
947
+        placement = typeof this.options.placement == 'function' ?
948
+          this.options.placement.call(this, $tip[0], this.$element[0]) :
949
+          this.options.placement
950
+
951
+        inside = /in/.test(placement)
952
+
953
+        $tip
954
+          .remove()
955
+          .css({ top: 0, left: 0, display: 'block' })
956
+          .appendTo(inside ? this.$element : document.body)
957
+
958
+        pos = this.getPosition(inside)
959
+
960
+        actualWidth = $tip[0].offsetWidth
961
+        actualHeight = $tip[0].offsetHeight
962
+
963
+        switch (inside ? placement.split(' ')[1] : placement) {
964
+          case 'bottom':
965
+            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
966
+            break
967
+          case 'top':
968
+            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
969
+            break
970
+          case 'left':
971
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
972
+            break
973
+          case 'right':
974
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
975
+            break
976
+        }
977
+
978
+        $tip
979
+          .css(tp)
980
+          .addClass(placement)
981
+          .addClass('in')
982
+      }
983
+    }
984
+
985
+  , setContent: function () {
986
+      var $tip = this.tip()
987
+      $tip.find('.tooltip-inner').html(this.getTitle())
988
+      $tip.removeClass('fade in top bottom left right')
989
+    }
990
+
991
+  , hide: function () {
992
+      var that = this
993
+        , $tip = this.tip()
994
+
995
+      $tip.removeClass('in')
996
+
997
+      function removeWithAnimation() {
998
+        var timeout = setTimeout(function () {
999
+          $tip.off($.support.transition.end).remove()
1000
+        }, 500)
1001
+
1002
+        $tip.one($.support.transition.end, function () {
1003
+          clearTimeout(timeout)
1004
+          $tip.remove()
1005
+        })
1006
+      }
1007
+
1008
+      $.support.transition && this.$tip.hasClass('fade') ?
1009
+        removeWithAnimation() :
1010
+        $tip.remove()
1011
+    }
1012
+
1013
+  , fixTitle: function () {
1014
+      var $e = this.$element
1015
+      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1016
+        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
1017
+      }
1018
+    }
1019
+
1020
+  , hasContent: function () {
1021
+      return this.getTitle()
1022
+    }
1023
+
1024
+  , getPosition: function (inside) {
1025
+      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
1026
+        width: this.$element[0].offsetWidth
1027
+      , height: this.$element[0].offsetHeight
1028
+      })
1029
+    }
1030
+
1031
+  , getTitle: function () {
1032
+      var title
1033
+        , $e = this.$element
1034
+        , o = this.options
1035
+
1036
+      title = $e.attr('data-original-title')
1037
+        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
1038
+
1039
+      title = title.toString().replace(/(^\s*|\s*$)/, "")
1040
+
1041
+      return title
1042
+    }
1043
+
1044
+  , tip: function () {
1045
+      return this.$tip = this.$tip || $(this.options.template)
1046
+    }
1047
+
1048
+  , validate: function () {
1049
+      if (!this.$element[0].parentNode) {
1050
+        this.hide()
1051
+        this.$element = null
1052
+        this.options = null
1053
+      }
1054
+    }
1055
+
1056
+  , enable: function () {
1057
+      this.enabled = true
1058
+    }
1059
+
1060
+  , disable: function () {
1061
+      this.enabled = false
1062
+    }
1063
+
1064
+  , toggleEnabled: function () {
1065
+      this.enabled = !this.enabled
1066
+    }
1067
+
1068
+  , toggle: function () {
1069
+      this[this.tip().hasClass('in') ? 'hide' : 'show']()
1070
+    }
1071
+
1072
+  }
1073
+
1074
+
1075
+ /* TOOLTIP PLUGIN DEFINITION
1076
+  * ========================= */
1077
+
1078
+  $.fn.tooltip = function ( option ) {
1079
+    return this.each(function () {
1080
+      var $this = $(this)
1081
+        , data = $this.data('tooltip')
1082
+        , options = typeof option == 'object' && option
1083
+      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1084
+      if (typeof option == 'string') data[option]()
1085
+    })
1086
+  }
1087
+
1088
+  $.fn.tooltip.Constructor = Tooltip
1089
+
1090
+  $.fn.tooltip.defaults = {
1091
+    animation: true
1092
+  , delay: 0
1093
+  , selector: false
1094
+  , placement: 'top'
1095
+  , trigger: 'hover'
1096
+  , title: ''
1097
+  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1098
+  }
1099
+
1100
+}( window.jQuery )
1101
+/* ===========================================================
1102
+ * bootstrap-popover.js v2.0.0
1103
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
1104
+ * ===========================================================
1105
+ * Copyright 2012 Twitter, Inc.
1106
+ *
1107
+ * Licensed under the Apache License, Version 2.0 (the "License");
1108
+ * you may not use this file except in compliance with the License.
1109
+ * You may obtain a copy of the License at
1110
+ *
1111
+ * http://www.apache.org/licenses/LICENSE-2.0
1112
+ *
1113
+ * Unless required by applicable law or agreed to in writing, software
1114
+ * distributed under the License is distributed on an "AS IS" BASIS,
1115
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1116
+ * See the License for the specific language governing permissions and
1117
+ * limitations under the License.
1118
+ * =========================================================== */
1119
+
1120
+
1121
+!function( $ ) {
1122
+
1123
+ "use strict"
1124
+
1125
+  var Popover = function ( element, options ) {
1126
+    this.init('popover', element, options)
1127
+  }
1128
+
1129
+  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1130
+     ========================================== */
1131
+
1132
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1133
+
1134
+    constructor: Popover
1135
+
1136
+  , setContent: function () {
1137
+      var $tip = this.tip()
1138
+        , title = this.getTitle()
1139
+        , content = this.getContent()
1140
+
1141
+      $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
1142
+      $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
1143
+
1144
+      $tip.removeClass('fade top bottom left right in')
1145
+    }
1146
+
1147
+  , hasContent: function () {
1148
+      return this.getTitle() || this.getContent()
1149
+    }
1150
+
1151
+  , getContent: function () {
1152
+      var content
1153
+        , $e = this.$element
1154
+        , o = this.options
1155
+
1156
+      content = $e.attr('data-content')
1157
+        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
1158
+
1159
+      content = content.toString().replace(/(^\s*|\s*$)/, "")
1160
+
1161
+      return content
1162
+    }
1163
+
1164
+  , tip: function() {
1165
+      if (!this.$tip) {
1166
+        this.$tip = $(this.options.template)
1167
+      }
1168
+      return this.$tip
1169
+    }
1170
+
1171
+  })
1172
+
1173
+
1174
+ /* POPOVER PLUGIN DEFINITION
1175
+  * ======================= */
1176
+
1177
+  $.fn.popover = function ( option ) {
1178
+    return this.each(function () {
1179
+      var $this = $(this)
1180
+        , data = $this.data('popover')
1181
+        , options = typeof option == 'object' && option
1182
+      if (!data) $this.data('popover', (data = new Popover(this, options)))
1183
+      if (typeof option == 'string') data[option]()
1184
+    })
1185
+  }
1186
+
1187
+  $.fn.popover.Constructor = Popover
1188
+
1189
+  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1190
+    placement: 'right'
1191
+  , content: ''
1192
+  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
1193
+  })
1194
+
1195
+}( window.jQuery )
1196
+/* =============================================================
1197
+ * bootstrap-scrollspy.js v2.0.0
1198
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1199
+ * =============================================================
1200
+ * Copyright 2012 Twitter, Inc.
1201
+ *
1202
+ * Licensed under the Apache License, Version 2.0 (the "License");
1203
+ * you may not use this file except in compliance with the License.
1204
+ * You may obtain a copy of the License at
1205
+ *
1206
+ * http://www.apache.org/licenses/LICENSE-2.0
1207
+ *
1208
+ * Unless required by applicable law or agreed to in writing, software
1209
+ * distributed under the License is distributed on an "AS IS" BASIS,
1210
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1211
+ * See the License for the specific language governing permissions and
1212
+ * limitations under the License.
1213
+ * ============================================================== */
1214
+
1215
+!function ( $ ) {
1216
+
1217
+  "use strict"
1218
+
1219
+  /* SCROLLSPY CLASS DEFINITION
1220
+   * ========================== */
1221
+
1222
+  function ScrollSpy( element, options) {
1223
+    var process = $.proxy(this.process, this)
1224
+      , $element = $(element).is('body') ? $(window) : $(element)
1225
+      , href
1226
+    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1227
+    this.$scrollElement = $element.on('scroll.scroll.data-api', process)
1228
+    this.selector = (this.options.target
1229
+      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1230
+      || '') + ' .nav li > a'
1231
+    this.$body = $('body').on('click.scroll.data-api', this.selector, process)
1232
+    this.refresh()
1233
+    this.process()
1234
+  }
1235
+
1236
+  ScrollSpy.prototype = {
1237
+
1238
+      constructor: ScrollSpy
1239
+
1240
+    , refresh: function () {
1241
+        this.targets = this.$body
1242
+          .find(this.selector)
1243
+          .map(function () {
1244
+            var href = $(this).attr('href')
1245
+            return /^#\w/.test(href) && $(href).length ? href : null
1246
+          })
1247
+
1248
+        this.offsets = $.map(this.targets, function (id) {
1249
+          return $(id).position().top
1250
+        })
1251
+      }
1252
+
1253
+    , process: function () {
1254
+        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1255
+          , offsets = this.offsets
1256
+          , targets = this.targets
1257
+          , activeTarget = this.activeTarget
1258
+          , i
1259
+
1260
+        for (i = offsets.length; i--;) {
1261
+          activeTarget != targets[i]
1262
+            && scrollTop >= offsets[i]
1263
+            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1264
+            && this.activate( targets[i] )
1265
+        }
1266
+      }
1267
+
1268
+    , activate: function (target) {
1269
+        var active
1270
+
1271
+        this.activeTarget = target
1272
+
1273
+        this.$body
1274
+          .find(this.selector).parent('.active')
1275
+          .removeClass('active')
1276
+
1277
+        active = this.$body
1278
+          .find(this.selector + '[href="' + target + '"]')
1279
+          .parent('li')
1280
+          .addClass('active')
1281
+
1282
+        if ( active.parent('.dropdown-menu') )  {
1283
+          active.closest('li.dropdown').addClass('active')
1284
+        }
1285
+      }
1286
+
1287
+  }
1288
+
1289
+
1290
+ /* SCROLLSPY PLUGIN DEFINITION
1291
+  * =========================== */
1292
+
1293
+  $.fn.scrollspy = function ( option ) {
1294
+    return this.each(function () {
1295
+      var $this = $(this)
1296
+        , data = $this.data('scrollspy')
1297
+        , options = typeof option == 'object' && option
1298
+      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1299
+      if (typeof option == 'string') data[option]()
1300
+    })
1301
+  }
1302
+
1303
+  $.fn.scrollspy.Constructor = ScrollSpy
1304
+
1305
+  $.fn.scrollspy.defaults = {
1306
+    offset: 10
1307
+  }
1308
+
1309
+
1310
+ /* SCROLLSPY DATA-API
1311
+  * ================== */
1312
+
1313
+  $(function () {
1314
+    $('[data-spy="scroll"]').each(function () {
1315
+      var $spy = $(this)
1316
+      $spy.scrollspy($spy.data())
1317
+    })
1318
+  })
1319
+
1320
+}( window.jQuery )
1321
+/* ========================================================
1322
+ * bootstrap-tab.js v2.0.0
1323
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
1324
+ * ========================================================
1325
+ * Copyright 2012 Twitter, Inc.
1326
+ *
1327
+ * Licensed under the Apache License, Version 2.0 (the "License");
1328
+ * you may not use this file except in compliance with the License.
1329
+ * You may obtain a copy of the License at
1330
+ *
1331
+ * http://www.apache.org/licenses/LICENSE-2.0
1332
+ *
1333
+ * Unless required by applicable law or agreed to in writing, software
1334
+ * distributed under the License is distributed on an "AS IS" BASIS,
1335
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1336
+ * See the License for the specific language governing permissions and
1337
+ * limitations under the License.
1338
+ * ======================================================== */
1339
+
1340
+
1341
+!function( $ ){
1342
+
1343
+  "use strict"
1344
+
1345
+ /* TAB CLASS DEFINITION
1346
+  * ==================== */
1347
+
1348
+  var Tab = function ( element ) {
1349
+    this.element = $(element)
1350
+  }
1351
+
1352
+  Tab.prototype = {
1353
+
1354
+    constructor: Tab
1355
+
1356
+  , show: function () {
1357
+      var $this = this.element
1358
+        , $ul = $this.closest('ul:not(.dropdown-menu)')
1359
+        , selector = $this.attr('data-target')
1360
+        , previous
1361
+        , $target
1362
+
1363
+      if (!selector) {
1364
+        selector = $this.attr('href')
1365
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1366
+      }
1367
+
1368
+      if ( $this.parent('li').hasClass('active') ) return
1369
+
1370
+      previous = $ul.find('.active a').last()[0]
1371
+
1372
+      $this.trigger({
1373
+        type: 'show'
1374
+      , relatedTarget: previous
1375
+      })
1376
+
1377
+      $target = $(selector)
1378
+
1379
+      this.activate($this.parent('li'), $ul)
1380
+      this.activate($target, $target.parent(), function () {
1381
+        $this.trigger({
1382
+          type: 'shown'
1383
+        , relatedTarget: previous
1384
+        })
1385
+      })
1386
+    }
1387
+
1388
+  , activate: function ( element, container, callback) {
1389
+      var $active = container.find('> .active')
1390
+        , transition = callback
1391
+            && $.support.transition
1392
+            && $active.hasClass('fade')
1393
+
1394
+      function next() {
1395
+        $active
1396
+          .removeClass('active')
1397
+          .find('> .dropdown-menu > .active')
1398
+          .removeClass('active')
1399
+
1400
+        element.addClass('active')
1401
+
1402
+        if (transition) {
1403
+          element[0].offsetWidth // reflow for transition
1404
+          element.addClass('in')
1405
+        } else {
1406
+          element.removeClass('fade')
1407
+        }
1408
+
1409
+        if ( element.parent('.dropdown-menu') ) {
1410
+          element.closest('li.dropdown').addClass('active')
1411
+        }
1412
+
1413
+        callback && callback()
1414
+      }
1415
+
1416
+      transition ?
1417
+        $active.one($.support.transition.end, next) :
1418
+        next()
1419
+
1420
+      $active.removeClass('in')
1421
+    }
1422
+  }
1423
+
1424
+
1425
+ /* TAB PLUGIN DEFINITION
1426
+  * ===================== */
1427
+
1428
+  $.fn.tab = function ( option ) {
1429
+    return this.each(function () {
1430
+      var $this = $(this)
1431
+        , data = $this.data('tab')
1432
+      if (!data) $this.data('tab', (data = new Tab(this)))
1433
+      if (typeof option == 'string') data[option]()
1434
+    })
1435
+  }
1436
+
1437
+  $.fn.tab.Constructor = Tab
1438
+
1439
+
1440
+ /* TAB DATA-API
1441
+  * ============ */
1442
+
1443
+  $(function () {
1444
+    $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1445
+      e.preventDefault()
1446
+      $(this).tab('show')
1447
+    })
1448
+  })
1449
+
1450
+}( window.jQuery )
1451
+/* =============================================================
1452
+ * bootstrap-typeahead.js v2.0.0
1453
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
1454
+ * =============================================================
1455
+ * Copyright 2012 Twitter, Inc.
1456
+ *
1457
+ * Licensed under the Apache License, Version 2.0 (the "License");
1458
+ * you may not use this file except in compliance with the License.
1459
+ * You may obtain a copy of the License at
1460
+ *
1461
+ * http://www.apache.org/licenses/LICENSE-2.0
1462
+ *
1463
+ * Unless required by applicable law or agreed to in writing, software
1464
+ * distributed under the License is distributed on an "AS IS" BASIS,
1465
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1466
+ * See the License for the specific language governing permissions and
1467
+ * limitations under the License.
1468
+ * ============================================================ */
1469
+
1470
+!function( $ ){
1471
+
1472
+  "use strict"
1473
+
1474
+  var Typeahead = function ( element, options ) {
1475
+    this.$element = $(element)
1476
+    this.options = $.extend({}, $.fn.typeahead.defaults, options)
1477
+    this.matcher = this.options.matcher || this.matcher
1478
+    this.sorter = this.options.sorter || this.sorter
1479
+    this.highlighter = this.options.highlighter || this.highlighter
1480
+    this.$menu = $(this.options.menu).appendTo('body')
1481
+    this.source = this.options.source
1482
+    this.shown = false
1483
+    this.listen()
1484
+  }
1485
+
1486
+  Typeahead.prototype = {
1487
+
1488
+    constructor: Typeahead
1489
+
1490
+  , select: function () {
1491
+      var val = this.$menu.find('.active').attr('data-value')
1492
+      this.$element.val(val)
1493
+      return this.hide()
1494
+    }
1495
+
1496
+  , show: function () {
1497
+      var pos = $.extend({}, this.$element.offset(), {
1498
+        height: this.$element[0].offsetHeight
1499
+      })
1500
+
1501
+      this.$menu.css({
1502
+        top: pos.top + pos.height
1503
+      , left: pos.left
1504
+      })
1505
+
1506
+      this.$menu.show()
1507
+      this.shown = true
1508
+      return this
1509
+    }
1510
+
1511
+  , hide: function () {
1512
+      this.$menu.hide()
1513
+      this.shown = false
1514
+      return this
1515
+    }
1516
+
1517
+  , lookup: function (event) {
1518
+      var that = this
1519
+        , items
1520
+        , q
1521
+
1522
+      this.query = this.$element.val()
1523
+
1524
+      if (!this.query) {
1525
+        return this.shown ? this.hide() : this
1526
+      }
1527
+
1528
+      items = $.grep(this.source, function (item) {
1529
+        if (that.matcher(item)) return item
1530
+      })
1531
+
1532
+      items = this.sorter(items)
1533
+
1534
+      if (!items.length) {
1535
+        return this.shown ? this.hide() : this
1536
+      }
1537
+
1538
+      return this.render(items.slice(0, this.options.items)).show()
1539
+    }
1540
+
1541
+  , matcher: function (item) {
1542
+      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1543
+    }
1544
+
1545
+  , sorter: function (items) {
1546
+      var beginswith = []
1547
+        , caseSensitive = []
1548
+        , caseInsensitive = []
1549
+        , item
1550
+
1551
+      while (item = items.shift()) {
1552
+        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1553
+        else if (~item.indexOf(this.query)) caseSensitive.push(item)
1554
+        else caseInsensitive.push(item)
1555
+      }
1556
+
1557
+      return beginswith.concat(caseSensitive, caseInsensitive)
1558
+    }
1559
+
1560
+  , highlighter: function (item) {
1561
+      return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
1562
+        return '<strong>' + match + '</strong>'
1563
+      })
1564
+    }
1565
+
1566
+  , render: function (items) {
1567
+      var that = this
1568
+
1569
+      items = $(items).map(function (i, item) {
1570
+        i = $(that.options.item).attr('data-value', item)
1571
+        i.find('a').html(that.highlighter(item))
1572
+        return i[0]
1573
+      })
1574
+
1575
+      items.first().addClass('active')
1576
+      this.$menu.html(items)
1577
+      return this
1578
+    }
1579
+
1580
+  , next: function (event) {
1581
+      var active = this.$menu.find('.active').removeClass('active')
1582
+        , next = active.next()
1583
+
1584
+      if (!next.length) {
1585
+        next = $(this.$menu.find('li')[0])
1586
+      }
1587
+
1588
+      next.addClass('active')
1589
+    }
1590
+
1591
+  , prev: function (event) {
1592
+      var active = this.$menu.find('.active').removeClass('active')
1593
+        , prev = active.prev()
1594
+
1595
+      if (!prev.length) {
1596
+        prev = this.$menu.find('li').last()
1597
+      }
1598
+
1599
+      prev.addClass('active')
1600
+    }
1601
+
1602
+  , listen: function () {
1603
+      this.$element
1604
+        .on('blur',     $.proxy(this.blur, this))
1605
+        .on('keypress', $.proxy(this.keypress, this))
1606
+        .on('keyup',    $.proxy(this.keyup, this))
1607
+
1608
+      if ($.browser.webkit || $.browser.msie) {
1609
+        this.$element.on('keydown', $.proxy(this.keypress, this))
1610
+      }
1611
+
1612
+      this.$menu
1613
+        .on('click', $.proxy(this.click, this))
1614
+        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1615
+    }
1616
+
1617
+  , keyup: function (e) {
1618
+      e.stopPropagation()
1619
+      e.preventDefault()
1620
+
1621
+      switch(e.keyCode) {
1622
+        case 40: // down arrow
1623
+        case 38: // up arrow
1624
+          break
1625
+
1626
+        case 9: // tab
1627
+        case 13: // enter
1628
+          if (!this.shown) return
1629
+          this.select()
1630
+          break
1631
+
1632
+        case 27: // escape
1633
+          this.hide()
1634
+          break
1635
+
1636
+        default:
1637
+          this.lookup()
1638
+      }
1639
+
1640
+  }
1641
+
1642
+  , keypress: function (e) {
1643
+      e.stopPropagation()
1644
+      if (!this.shown) return
1645
+
1646
+      switch(e.keyCode) {
1647
+        case 9: // tab
1648
+        case 13: // enter
1649
+        case 27: // escape
1650
+          e.preventDefault()
1651
+          break
1652
+
1653
+        case 38: // up arrow
1654
+          e.preventDefault()
1655
+          this.prev()
1656
+          break
1657
+
1658
+        case 40: // down arrow
1659
+          e.preventDefault()
1660
+          this.next()
1661
+          break
1662
+      }
1663
+    }
1664
+
1665
+  , blur: function (e) {
1666
+      var that = this
1667
+      e.stopPropagation()
1668
+      e.preventDefault()
1669
+      setTimeout(function () { that.hide() }, 150)
1670
+    }
1671
+
1672
+  , click: function (e) {
1673
+      e.stopPropagation()
1674
+      e.preventDefault()
1675
+      this.select()
1676
+    }
1677
+
1678
+  , mouseenter: function (e) {
1679
+      this.$menu.find('.active').removeClass('active')
1680
+      $(e.currentTarget).addClass('active')
1681
+    }
1682
+
1683
+  }
1684
+
1685
+
1686
+  /* TYPEAHEAD PLUGIN DEFINITION
1687
+   * =========================== */
1688
+
1689
+  $.fn.typeahead = function ( option ) {
1690
+    return this.each(function () {
1691
+      var $this = $(this)
1692
+        , data = $this.data('typeahead')
1693
+        , options = typeof option == 'object' && option
1694
+      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1695
+      if (typeof option == 'string') data[option]()
1696
+    })
1697
+  }
1698
+
1699
+  $.fn.typeahead.defaults = {
1700
+    source: []
1701
+  , items: 8
1702
+  , menu: '<ul class="typeahead dropdown-menu"></ul>'
1703
+  , item: '<li><a href="#"></a></li>'
1704
+  }
1705
+
1706
+  $.fn.typeahead.Constructor = Typeahead
1707
+
1708
+
1709
+ /* TYPEAHEAD DATA-API
1710
+  * ================== */
1711
+
1712
+  $(function () {
1713
+    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1714
+      var $this = $(this)
1715
+      if ($this.data('typeahead')) return
1716
+      e.preventDefault()
1717
+      $this.typeahead($this.data())
1718
+    })
1719
+  })
1720
+
1721
+}( window.jQuery )
0 1722
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+!function(a){a(function(){"use strict",a.support.transition=function(){var b=document.body||document.documentElement,c=b.style,d=c.transition!==undefined||c.WebkitTransition!==undefined||c.MozTransition!==undefined||c.MsTransition!==undefined||c.OTransition!==undefined;return d&&{end:function(){var b="TransitionEnd";return a.browser.webkit?b="webkitTransitionEnd":a.browser.mozilla?b="transitionend":a.browser.opera&&(b="oTransitionEnd"),b}()}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype={constructor:c,close:function(b){function f(){e.remove(),e.trigger("closed")}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),e.trigger("close"),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()}},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype={constructor:b,setState:function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},toggle:function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")}},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){a(b.target).button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.carousel.defaults,c),this.options.slide&&this.slide(this.options.slide)};b.prototype={cycle:function(){return this.interval=setInterval(a.proxy(this.next,this),this.options.interval),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(){return clearInterval(this.interval),this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;return this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h](),!a.support.transition&&this.$element.hasClass("slide")?(this.$element.trigger("slide"),d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")):(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.trigger("slide"),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})),f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=typeof c=="object"&&c;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():e.cycle()})},a.fn.carousel.defaults={interval:5e3},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find(".in"),e;d&&d.length&&(e=d.data("collapse"),d.collapse("hide"),e||d.data("collapse",null)),this.$element[b](0),this.transition("addClass","show","shown"),this.$element[b](this.$element[0][c])},hide:function(){var a=this.dimension();this.reset(this.$element[a]()),this.transition("removeClass","hide","hidden"),this.$element[a](0)},reset:function(a){var b=this.dimension();this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element.addClass("collapse")},transition:function(b,c,d){var e=this,f=function(){c=="show"&&e.reset(),e.$element.trigger(d)};this.$element.trigger(c)[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e=c.attr("data-target"),f,g;return e||(e=c.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,"")),f=a(e),f.length||(f=c.parent()),g=f.hasClass("open"),d(),!g&&f.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=a.extend({},a.fn.modal.defaults,c),this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this;if(this.isShown)return;a("body").addClass("modal-open"),this.isShown=!0,this.$element.trigger("show"),g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");!b.$element.parent().length&&b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();if(!this.isShown)return;var e=this;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.trigger("hide").removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=typeof c=="object"&&c;e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.show?c.show():(c.hoverState="in",setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show))},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);!c.options.delay||!c.options.delay.hide?c.hide():(c.hoverState="out",setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide))},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},setContent:function(){var a=this.tip();a.find(".tooltip-inner").html(this.getTitle()),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,delay:0,selector:!1,placement:"top",trigger:"hover",title:"",template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var b=this.tip(),c=this.getTitle(),d=this.getContent();b.find(".popover-title")[a.type(c)=="object"?"append":"html"](c),b.find(".popover-content > *")[a.type(d)=="object"?"append":"html"](d),b.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a=a.toString().replace(/(^\s*|\s*$)/,""),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body").on("click.scroll.data-api",this.selector,d),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){this.targets=this.$body.find(this.selector).map(function(){var b=a(this).attr("href");return/^#\w/.test(b)&&a(b).length?b:null}),this.offsets=a.map(this.targets,function(b){return a(b).position().top})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.offsets,c=this.targets,d=this.activeTarget,e;for(e=b.length;e--;)d!=c[e]&&a>=b[e]&&(!b[e+1]||a<=b[e+1])&&this.activate(c[e])},activate:function(a){var b;this.activeTarget=a,this.$body.find(this.selector).parent(".active").removeClass("active"),b=this.$body.find(this.selector+'[href="'+a+'"]').parent("li").addClass("active"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],b.trigger({type:"show",relatedTarget:e}),f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(a),this.hide()},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){if(c.matcher(a))return a}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){return a.replace(new RegExp("("+this.query+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){a.stopPropagation(),a.preventDefault();switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:this.hide();break;default:this.lookup()}},keypress:function(a){a.stopPropagation();if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}},blur:function(a){var b=this;a.stopPropagation(),a.preventDefault(),setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
0 1
\ No newline at end of file
1 2
new file mode 100644
... ...
@@ -0,0 +1,4 @@
0
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
1
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
2
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
3
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
0 4
\ No newline at end of file
1 5
new file mode 100644
... ...
@@ -0,0 +1,515 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Recent Changes</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+      
45
+      <section id="faq" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>Recent Changes <small>What's been happening?</small></h2>
49
+          <p>This is an incomplete list of recent changes to DevStack.  For the complete list see <a href="https://review.openstack.org/#/q/status:merged+project:openstack-dev/devstack,n,z">the DevStack project in Gerrit</a>.</p>
50
+          <dl class='pull-left'>
51
+            <!--
52
+            <dt></dt>
53
+            <dd> <em>Commit <a href="https://review.openstack.org/x">x</a> merged dd_mmm_yyyy</em></dd>
54
+            -->
55
+            <dt>Install libguestfs with Nova Compute</dt>
56
+            <dd>Add for Ubuntu installations; this eliminates use of NBD. <em>Commit <a href="https://review.openstack.org/70237">70237</a> merged 31 Jan 2014</em></dd>
57
+            <dt>Fix Tempest config settings</dt>
58
+            <dd>Cleans up a number of configuration issues between DevStack and Tempest. <em>Commit <a href="https://review.openstack.org/68532">68532</a> merged 31 Jan 2014</em></dd>
59
+            <dt>Merge Gantt support</dt>
60
+            <dd>Gantt support is added to the repo as a plugin. <em>Commit <a href="https://review.openstack.org/67666">67666</a> merged 31 Jan 2014</em></dd>
61
+            <dt>Set Keystone admin_bind_host</dt>
62
+            <dd>This works around an odd problem with Keystone's use of port 35357 and its use as an ephemeral port. <em>Commit <a href="https://review.openstack.org/57577">57577</a> merged 30 Jan 2014</em></dd>
63
+            <dt>Generate Tempest service list</dt>
64
+            <dd>This eliminates the manual maintenance of the services Tempest checks for. <em>Commit <a href="https://review.openstack.org/70015">70015</a> merged 30 Jan 2014</em></dd>
65
+            <dt>Fix stop_swift()</dt>
66
+            <dd>Kill all swift processes correctly with pkill. <em>Commit <a href="https://review.openstack.org/69440">69440</a> merged 28 Jan 2014</em></dd>
67
+            <dt>Update Cinder cert script to use run_tempest</dt>
68
+            <dd>Update following changes to Tempest's run_tests.sh script. <em>Commit <a href="https://review.openstack.org/66904">66904</a> merged 25 Jan 2014</em></dd>
69
+            <dt>Add missing mongodb client</dt>
70
+            <dd>The mongodb client was skipped on Fedora. <em>Commit <a href="https://review.openstack.org/65147">65147</a> merged 25 Jan 2014</em></dd>
71
+            <dt>Fix reverting local changes in repo</dt>
72
+            <dd>Work around a bug in <code>git diff --quiet</code> used in reverting the repo changes during global requirements handling. <em>Commit <a href="https://review.openstack.org/68546">68546</a> merged 25 Jan 2014</em></dd>
73
+            <dt>Add cirros 3.0 image for Xenserver</dt>
74
+            <dd>Xenserver wants the cirros 3.0 vhd image <em>Commit <a href="https://review.openstack.org/68136">68136</a> merged 25 Jan 2014</em></dd>
75
+            <dt>Tweak upload_image.sh for .vmdk</dt>
76
+            <dd>Relax the vmdk regex for parsing metadata out of the filename. <em>Commit <a href="https://review.openstack.org/68821">68821</a> merged 25 Jan 2014</em></dd>
77
+            <dt>Keystone use common logging</dt>
78
+            <dd>Switch Keystone to use common logging configuration. <em>Commit <a href="https://review.openstack.org/68530">68530</a> merged 25 Jan 2014</em></dd>
79
+            <dt>Do not set bind_host for Heat APIs</dt>
80
+            <dd>Let the Heat API service bind to 0.0.0.0 to be consistent with other DevStack services. <em>Commit <a href="https://review.openstack.org/67683">67683</a> merged 25 Jan 2014</em></dd>
81
+            <dt>Fine tune libvirt logging</dt>
82
+            <dd>Disable client-side log and tune server-side to usable levels. <em>Commit <a href="https://review.openstack.org/68194">68194</a> merged 24 Jan 2014</em></dd>
83
+            <dt>Add check framework for Neutron server/backen integration</dt>
84
+            <dd>Add the framework to verify Neutron controllers and backend service configurations per plugin requirements. <em>Commit <a href="https://review.openstack.org/64754">64754</a> merged 17 Jan 2014</em></dd>
85
+            <dt>Add Marconi to Tempest config</dt>
86
+            <dd>Check if Marconi is enabled in Tempest configuration <em>Commit <a href="https://review.openstack.org/65478">65478</a> merged 13 Jan 2014</em></dd>
87
+            <dt>Enable libvirt logging</dt>
88
+            <dd>Enable server- and client-side logging for libvirt <em>Commit <a href="https://review.openstack.org/65834">65834</a> merged 13 Jan 2014</em></dd>
89
+            <dt>Clean up Heat/Cloud Formation catalog template</dt>
90
+            <dd>The service catalog entries in the template file for orchestration and cloud formation were out of whack. <em>Commit <a href="https://review.openstack.org/65916">65916</a> merged 13 Jan 2014</em></dd>
91
+            <dt>Create Ceilometer service accounts</dt>
92
+            <dd>Create the Ceilometer service accounts in Keystone. <em>Commit <a href="https://review.openstack.org/65678">65678</a> merged 13 Jan 2014</em></dd>
93
+            <dt>Freshen Ubuntu supported eleases</dt>
94
+            <dd>Remove oneiric and quantal support. <em>Commit <a href="https://review.openstack.org/64836">64836</a> merged 13 Jan 2014</em></dd>
95
+            <dt>Strengthen server shutdown</dt>
96
+            <dd>Add screen_stop() to kill server process groups to ensure shutdown of child processes. <em>Commit <a href="https://review.openstack.org/66080">66080</a> merged 13 Jan 2014</em></dd>
97
+            <dt>Support for VMware NSX plugin</dt>
98
+            <dd>This is the Nicira NVP plugin renamed. <em>Commit <a href="https://review.openstack.org/65002">65002</a> merged 13 Jan 2014</em></dd>
99
+            <dt>Remove --tenant_id usage</dt>
100
+            <dd>Remove remaining uses of <code>--tenant_id</code> and replace with <code>--tenant-id</code>. <em>Commit <a href="https://review.openstack.org/65682">65682</a> merged 11 Jan 2014</em></dd>
101
+            <dt>Identity API version configuration for Cinder, Glance and Heat</dt>
102
+            <dd>Use IDENTITY_API_VERISON to configure Cinder, Glance and Heat. <em>Commit <a href="https://review.openstack.org/57620">57620</a> merged 11 Jan 2014</em></dd>
103
+            <dt>Fedora 20 Support</dt>
104
+            <dd>Add support for Fedora 20, remove Fedora 16 and 17 support. <em>Commit <a href="https://review.openstack.org/63647">63647</a> merged 11 Jan 2014</em></dd>
105
+            <dt>Trove service availablility in Tempest</dt>
106
+            <dd>Check if Trove is enabled in Tempest configuration. <em>Commit <a href="https://review.openstack.org/64913">64913</a> merged 11 Jan 2014</em></dd>
107
+
108
+            <dt>Change libvirtd log level to DEBUG</dt>
109
+            <dd>Keep libvirtd logs in the gate log stash. <em>Commit <a href="https://review.openstack.org/63992">63992</a> merged 02 Jan 2014</em></dd>
110
+            <dt>Fix section start bug in get_meta_section()</dt>
111
+            <dd>get_meta_section() would incorrectly interpret '[[' and ']]' in shell command lines inside local.conf. <em>Commit <a href="https://review.openstack.org/63280">63280</a> merged 21 Dec 2013</em></dd>
112
+            <dt>Use Fedora 20 final release</dt>
113
+            <dd>Set the URL to get the final Fedora 20 release image. <em>Commit <a href="https://review.openstack.org/63200">63200</a> merged 21 Dec 2013</em></dd>
114
+            <dt>Use Ubuntu 'saucy' as XenAPI DomU</dt>
115
+            <dd>Updated the XenAPI DomU to Ubuntu Saucy release. <em>Commit <a href="https://review.openstack.org/60107">60107</a> merged 21 Dec 2013</em></dd>
116
+            <dt>Begin support for RHEL7 Beta</dt>
117
+            <dd>Adjust the sed regex in GetOSVersion() to handle text between the version and codename in RHEL-style release strings. <em>Commit <a href="https://review.openstack.org/62543">62543</a> merged 17 Dec 2013</em></dd>
118
+            <dt>Configure Tempest tests for network extensions</dt>
119
+            <dd>Puts the value of NETWORK_API_EXTENSIONS into tempest.conf. <em>Commit <a href="https://review.openstack.org/62054">62054</a> merged 17 Dec 2013</em></dd>
120
+            <dt>Default floating IP range to /24</dt>
121
+            <dd>Set the default FLOATING_RANGE=172.24.4.0/24 to accomodate parallel testing in Tempest. <em>Commit <a href="https://review.openstack.org/58284">58284</a> merged 17 Dec 2013</em></dd>
122
+            <dt>Support oslo-rootwrap in Cinder</dt>
123
+            <dd>Cinder can use both cinder-rootwrap and oslo-rootwrap for a transitional period. <em>Commit <a href="https://review.openstack.org/62003">62003</a> merged 16 Dec 2013</em></dd>
124
+            <dt>Heat tests can use test image if present</dt>
125
+            <dd>If HEAT_CREATE_TEST_IMAGE is defined and the image named in its value is present Heat will use it rather than invoke diskimage-builder. <em>Commit <a href="https://review.openstack.org/59893">59893</a> merged 15 Dec 2013</em></dd>
126
+            <dt>Fix iniset() pipe ('|') bug</dt>
127
+            <dd>iniset() did not properly handle a value containing a pipe ('|') character. <em>Commit <a href="https://review.openstack.org/60170">60170</a> merged 14 Dec 2013</em></dd>
128
+            <dt>Define Q_L3_ENABLED=True for MidoNet plugin</dt>
129
+            <dd>Q_L3_ENABLED=True for MidoNet plugin. <em>Commit <a href="https://review.openstack.org/56459">56459</a> merged 12 Dec 2013</em></dd>
130
+            <dt>Fix Swift workers for non-proxies</dt>
131
+            <dd>Swift spawned more proxy workers than required in DevStack environments, reduce it to '1'. <em>Commit <a href="https://review.openstack.org/61122">61122</a> merged 12 Dec 2013</em></dd>
132
+            <dt>Add Keystone auth port to Nova config</dt>
133
+            <dd>Set keystone_authtoken:auth_port to KEYSTONE_AUTH_PORT in nova.conf. <em>Commit <a href="https://review.openstack.org/60736">60736</a> merged 12 Dec 2013</em></dd>
134
+            <dt>Increase additional flavor RAM on ppc64</dt>
135
+            <dd>Create the nano and micro flavors with 128MB and 256MB RAM respectively on ppc64. <em>Commit <a href="https://review.openstack.org/60606">60606</a> merged 12 Dec 2013</em></dd>
136
+            <dt>Increase XenAPI DomU memory</dt>
137
+            <dd>Increase XenAPI DomU memory (OSDOMU_MEM_MB) to 4GB by default. <em>Commit <a href="https://review.openstack.org/59792">59792</a> merged 10 Dec 2013</em></dd>
138
+            <dt>Assign unique names to fake nova-computes</dt>
139
+            <dd>Assign each fake nova-compute instance a unique name so the scheduler works properly. <em>Commit <a href="https://review.openstack.org/58700">58700</a> merged 09 Dec 2013</em></dd>
140
+            <dt>Fix whitespace bugs in merge_config_file()</dt>
141
+            <dd>Merge_config_file() did not properly skip lines with only whitespace. <em>Commit <a href="https://review.openstack.org/60112">60112</a> merged 09 Dec 2013</em></dd>
142
+            <dt>Setup Savanna user and endpoints</dt>
143
+            <dd>Create savanna user, and savanna and data_processing endpoints. <em>Commit <a href="https://review.openstack.org/60077">60077</a> merged 09 Dec 2013</em></dd>
144
+            <dt>Display DevStack status at XenAPI DomU login</dt>
145
+            <dd>Add DevStack setup setvice status to /etc/issue so it is displayed at the DomU login. <em>Commit <a href="https://review.openstack.org/48444">48444</a> merged 09 Dec 2013</em></dd>
146
+            <dt>Fix install_get_pip using proxy</dt>
147
+            <dd>install_get_pip did not work properly through an HTTP proxy. <em>Commit <a href="https://review.openstack.org/60242">60242</a> merged 07 Dec 2013</em></dd>
148
+            <dt>Add color logs to Trove</dt>
149
+            <dd>Add the colorized log output to Trove. <em>Commit <a href="https://review.openstack.org/58363">58363</a> merged 06 Dec 2013</em></dd>
150
+            <dt>Update LDAP support</dt>
151
+            <dd>Update DevStack's LDAP support to make the DN configurable. <em>Commit <a href="https://review.openstack.org/58590">58590</a> merged 06 Dec 2013</em></dd>
152
+            <dt>Add Marconi support</dt>
153
+            <dd>Add Marconi support via extras.d plugin. <em>Commit <a href="https://review.openstack.org/47999">47999</a> merged 05 Dec 2013</em></dd>
154
+            <dt>Split Ceilometer collector service</dt>
155
+            <dd>Split Celio collector service into ceilometer-collector and ceilometer-agent-notification. <em>Commit <a href="https://review.openstack.org/58600">58600</a> merged 05 Dec 2013</em></dd>
156
+            <dt>Add 'post-extra' configuration phase</dt>
157
+            <dd>The 'post-extra' configuration phase is processed after the 'extra' plugin phase is executed. <em>Commit <a href="https://review.openstack.org/55583">55583</a> merged 05 Dec 2013</em></dd>
158
+            <dt>Enable user interaction with stack.sh in XenAPI</dt>
159
+            <dd>Multiple changes to how DevStack is configured to run under XenServer. <em>Commit <a href="https://review.openstack.org/48092">48092</a> merged 04 Dec 2013</em></dd>
160
+            <dt>Handle VMDK metadata</dt>
161
+            <dd>upload_image.sh now attempts to get the metadata for a *.vmdk file from *-flat.vmdk. <em>Commit <a href="https://review.openstack.org/58356">58356</a> merged 04 Dec 2013</em></dd>
162
+            <dt>Deploy Keystone with SSL</dt>
163
+            <dd>Configure Keystone to use SSL rather than using the tls-proxy function. <em>Commit <a href="https://review.openstack.org/47076">47076</a> merged 03 Dec 2013</em></dd>
164
+            <dt>change default Git base to git.openstack.org</dt>
165
+            <dd>Pull repos from git.openstack.org where possible. <em>Commit <a href="https://review.openstack.org/56749">56749</a> merged 02 Dec 2013</em></dd>
166
+            <dt>Fix Neutron color log format</dt>
167
+            <dd>Fix Neutron color log format. <em>Commit <a href="https://review.openstack.org/58350">58350</a> merged 01 Dec 2013</em></dd>
168
+            <dt>Truncate PKI token logging</dt>
169
+            <dd>Limit the PKI token logged to 12 characters. <em>Commit <a href="https://review.openstack.org/57526">57526</a> merged 26 Nov 2013</em></dd>
170
+            <dt>Support memchace for Keystone token backend</dt>
171
+            <dd>Use memcache backend with KEYSTONE_TOKEN_BACKEND=memcache. <em>Commit <a href="https://review.openstack.org/56691">56691</a> merged 26 Nov 2013</em></dd>
172
+            <dt>Remove powervm hypervisor support</dt>
173
+            <dd>The powervm arch is EOL, will be replaced in the future. <em>Commit <a href="https://review.openstack.org/57789">57789</a> merged 25 Nov 2013</em></dd>
174
+            <dt>Increase default Swift timeouts</dt>
175
+            <dd>node_timeout and conn_timeout needed to be increased for testing in slow VM environments. <em>Commit <a href="https://review.openstack.org/57514">57514</a> merged 25 Nov 2013</em></dd>
176
+            <dt>Add hacking rules for shell scripts</dt>
177
+            <dd>Record the previously unwritten rules for common formatting. <em>Commit <a href="https://review.openstack.org/55024">55024</a> merged 24 Nov 2013</em></dd>
178
+            <dt>Default to Cinder API v2</dt>
179
+            <dd>Set OS_VOLUME_API_VERSION=2 by default. <em>Commit <a href="https://review.openstack.org/43045">43045</a> merged 22 Nov 2013</em></dd>
180
+            <dt>Drop nodejs dependency</dt>
181
+            <dd>Horizon no longer needs nodejs. <em>Commit <a href="https://review.openstack.org/55255">55255</a> merged 22 Nov 2013</em></dd>
182
+            <dt>Change to use STACK_USER rather than USER</dt>
183
+            <dd>This changes DevStack to use STACK_USER for username references. <em>Commit <a href="https://review.openstack.org/57212">57212</a> merged 22 Nov 2013</em></dd>
184
+            <dt>Enable specifying FLAT_NETWORK_BRIDGE in XenAPI</dt>
185
+            <dd>Set FLAT_NETWORK_BRIDGE for DomU. <em>Commit <a href="https://review.openstack.org/48296">48296</a> merged 22 Nov 2013</em></dd>
186
+            <dt>Add file: URL handling to upload_image.sh</dt>
187
+            <dd>upload_image.sh can now use file: URLs as the image source. <em>Commit <a href="https://review.openstack.org/56721">56721</a> merged 21 Nov 2013</em></dd>
188
+            <dt>Increase Swift backing storage size</dt>
189
+            <dd>Swift now has SWIFT_LOOPBACK_DISK_SIZE_DEFAULT=6G. <em>Commit <a href="https://review.openstack.org/56116">56116</a> merged 13 Nov 2013</em></dd>
190
+            <dt>Fix Horizon config for Apache 2.4</dt>
191
+            <dd>Handle Apache config differences according to Apache version and not distro release. <em>Commit <a href="https://review.openstack.org/54738">54738</a> merged 11 Nov 2013</em></dd>
192
+            <dt>Add FORCE_CONFIG_DRIVE to nova.conf</dt>
193
+            <dd>Add FORCE_CONFIG_DRIVE, default to 'always'. <em>Commit <a href="https://review.openstack.org/54746">54746</a> merged 01 Nov 2013</em></dd>
194
+            <dt>Turn off Nova firewall when using Neutron</dt>
195
+            <dd>Sets firewall_driver when Neutron is enabled. <em>Commit <a href="https://review.openstack.org/54827">54827</a> merged 01 Nov 2013</em></dd>
196
+            <dt>Use nova.conf for auth_token config</dt>
197
+            <dd>Eliminates using api-paste.ini. <em>Commit <a href="https://review.openstack.org/53212">53212</a> merged 01 Nov 2013</em></dd>
198
+            <dt>Use conder.conf for auth_token config</dt>
199
+            <dd>Eliminates using api-paste.ini. <em>Commit <a href="https://review.openstack.org/53213">53213</a> merged 01 Nov 2013</em></dd>
200
+            <dt>Add Cinder support for NFS driver</dt>
201
+            <dd>Set CINDER_DRIVER=nfs. <em>Commit <a href="https://review.openstack.org/53276">53276</a> merged 31 Oct 2013</em></dd>
202
+            <dt>Add Postgres for Ceilometer backend</dt>
203
+            <dd>Set CEILOMETER_BACKEND=postgresql. <em>Commit <a href="https://review.openstack.org/53715">53715</a> merged 31 Oct 2013</em></dd>
204
+            <dt>Add Ubuntu Trusty</dt>
205
+            <dd>Add support for Ubuntu Trusty. <em>Commit <a href="https://review.openstack.org/53965">53965</a> merged 30 Oct 2013</em></dd>
206
+            <dt>Enable Keystone auth in Ironic</dt>
207
+            <dd>Always use Keystone for Ironic auth. <em>Commit <a href="https://review.openstack.org/51845">51845</a> merged 25 Oct 2013</em></dd>
208
+            <dt>Add bash8 tool</dt>
209
+            <dd>Perform basic format tests in CI gate. <em>Commit <a href="https://review.openstack.org/51676">51676</a> merged 23 Oct 2013</em></dd>
210
+            <dt>Add Savanna support</dt>
211
+            <dd>Add Savanna support using the plugin mech. <em>Commit <a href="https://review.openstack.org/50601">50601</a> merged 22 Oct 2013</em></dd>
212
+            <dt>Install Ironic client</dt>
213
+            <dd>Add python-ironicclient repo. <em>Commit <a href="https://review.openstack.org/51853">51853</a> merged 22 Oct 2013</em></dd>
214
+
215
+            <dt>Fix fixup_stuff.sh for RHEL6</dt>
216
+            <dd>fixup_stuff.sh didn't work properly on RHEL6/Python 2.6 <em>Commit <a href="https://review.openstack.org/52176">52176</a> merged 17 Oct 2013</em></dd>
217
+            <dt>Add more extras.d hooks</dt>
218
+            <dd>Add more hooks to call into extras.d to support adding services without modifying core DevStack scripts. <em>Commit <a href="https://review.openstack.org/51939">51939</a> merged 16 Oct 2013</em></dd>
219
+            <dt>Add run_tests.sh</dt>
220
+            <dd>Add a simple run_tests.sh for running bash8. <em>Commit <a href="https://review.openstack.org/51711">51711</a> merged 15 Oct 2013</em></dd>
221
+            <dt>Add bash8 style checker</dt>
222
+            <dd>Add bash8 to check certain style constraints in shell scripts. <em>Commit <a href="https://review.openstack.org/51676">51676</a> merged 15 Oct 2013</em></dd>
223
+            <dt>Add trove-conductor service</dt>
224
+            <dd>Add trove-conductor service to Trove support <em>Commit <a href="https://review.openstack.org/49237">49237</a> merged 14 Oct 2013</em></dd>
225
+            <dt>Add new local configuration file</dt>
226
+            <dd>Add local.conf support to replace localrc, includes ability to set values in arbitrary config files. <em>Commit <a href="https://review.openstack.org/46768">46768</a> merged 14 Oct 2013</em></dd>
227
+            <dt>Remove 'stack' account creation from stack.sh</dt>
228
+            <dd>This forces stack.sh to not be run as root and provides the account creation as a separate script. <em>Commit <a href="https://review.openstack.org/49798">49798</a> merged 05 Oct 2013</em></dd>
229
+            <dt>Support running Keystone under Apache</dt>
230
+            <dd>Run Keystone under Apache along with Swift and Horizon <em>Commit <a href="https://review.openstack.org/46866">46866</a> merged 26 Sep 2013</em></dd>
231
+            <dt>Increase default Swift storage for Tempest</dt>
232
+            <dd>When Tempest is enabled increase the default Swift storage to 4Gb  <em>Commit <a href="https://review.openstack.org/46770">46770</a> merged 18 Sep 2013</em></dd>
233
+            <dt>Keystone mixed backend support</dt>
234
+            <dd>Add support for Keystone to use mixed backend configuration <em>Commit <a href="https://review.openstack.org/44605">44605</a> merged 16 Sep 2013</em></dd>
235
+            <dt>Add Trove support</dt>
236
+            <dd>Add support for Trove service <em>Commit <a href="https://review.openstack.org/38169">38169</a> merged 12 Sep 2013</em></dd>
237
+            <dt>Enable Neutron L3 plugon</dt>
238
+            <dd>Support Neutron's L3 plugin <em>Commit <a href="https://review.openstack.org/20909">20909</a> merged 10 Sep 2013</em></dd>
239
+            <dt>Configure VPNaaS panel in Horizon</dt>
240
+            <dd>If enabled configure VPNaaS panel in Horizon by default <em>Commit <a href="https://review.openstack.org/45751">45751</a> merged 10 Sep 2013</em></dd>
241
+            <dt>Enable multi-threaded Nova API servers</dt>
242
+            <dd>Sets the Nova API servers to use four worker threads by default <em>Commit <a href="https://review.openstack.org/45314">45314</a> merged 09 Sep 2031</em></dd>
243
+            <dt>Handle .vmdk custom properties</dt>
244
+            <dd>Parses property values out of the .vmdk filename and includes them in the glance upload. <em>Commit <a href="https://review.openstack.org/45181">45181</a> merged 09 Sep 2013</em></dd>
245
+            <dt>Use pip 1.4.1</dt>
246
+            <dd>Adds pip option --pre <em>Commit <a href="https://review.openstack.org/45436">45436</a> merged 06 Sep 2031</em></dd>
247
+            <dt>Rename Ceilometer alarm service</dt>
248
+            <dd>Change 'ceilometer-alarm-eval' to 'ceilometer-alarm-singleton' and 'ceilometer-alarm-notifier' <em>Commit <a href="https://review.openstack.org/45214">45214</a> merged 06 Sep 2013</em></dd>
249
+            <dt>Support OpenSwan in Neutron VPNaaS</dt>
250
+            <dd>Neutron VPNaaS changed IPSec to OpenSwan <em>Commit <a href="https://review.openstack.org/42265">42265</a> merged 06 Sep 2013</em></dd>
251
+            <dt>Change Ceilometer backend default to MySQL</dt>
252
+            <dd>Issues with MongoDB 2.4 availability resulted in this change <em>Commit <a href="https://review.openstack.org/43851">43851</a> merged 05 Sep 2013</em></dd>
253
+            <dt>Add Ironic support</dt>
254
+            <dd>Add Ironic as a supported service <em>Commit <a href="https://review.openstack.org/41053">41053</a> merged 03 Sep 2013</em></dd>
255
+            <dt>Add support for Docker hypervisor</dt>
256
+            <dd>Add Docker support and the hypervisor plugin mechanism <em>Commit <a href="https://review.openstack.org/40759">40759</a> merged 30 Aug 2013</em></dd>
257
+
258
+            <dt>Add support for Heat resource templates</dt>
259
+            <dd>Install Heat resource template files. <em>Commit <a href="https://review.openstack.org/43631">43631</a> merged 29 Aug 2013</em></dd>
260
+            <dt>Support Neutron FWaaS</dt>
261
+            <dd>Add support for OpenStack Networking Firewall (FWaaS). <em>Commit <a href="https://review.openstack.org/37147">37147</a> merged 29 Aug 2013</em></dd>
262
+            <dt>Add new #testonly tag for package prereq files</dt>
263
+            <dd>Add INSTALL_TESTONLY_PACKAGES to enable installing packages marked with #testonly.  These packages are required only for running unit tests. <em>Commit <a href="https://review.openstack.org/38127">38127</a> merged 28 Aug 2013</em></dd>
264
+            <dt>Add support for Heat environments</dt>
265
+            <dd>Install Heat global environment config files. <em>Commit <a href="https://review.openstack.org/43387">43387</a> merged 28 Aug 2013</em></dd>
266
+            <dt>Configure bash completion</dt>
267
+            <dd>Configure bash completion for cinder, keystone, neutron, nova and nova-manage. <em>Commit <a href="https://review.openstack.org/41928">41928</a> merged 26 Aug 2013</em></dd>
268
+            <dt>Change horizon Apache config file to horizon.conf</dt>
269
+            <dd>Add .conf to horizon Apache config file to be consistent with Fedora practice. <em>Commit <a href="https://review.openstack.org/40352">40352</a> merged 22 Aug 2013</em></dd>
270
+            <dt>Echo service start failures</dt>
271
+            <dd>Echo service start failures to console so status is obvious in gate logs. <em>Commit <a href="https://review.openstack.org/42427">42427</a> merged 16 Aug 2013</em></dd>
272
+            <dt>Colorize Heat logs</dt>
273
+            <dd>Add Nova-style color support to Heat logging. <em>Commit <a href="https://review.openstack.org/40342">40342</a> merged 16 Aug 2013</em></dd>
274
+            <dt>Add Cinder support to VMware configuration</dt>
275
+            <dd>Configures Cinder to use VMware backend. <em>Commit <a href="https://review.openstack.org/41612">41612</a> merged 15 Aug 2013</em></dd>
276
+            <dt>Default PIP_USE_MIRRORS to False</dt>
277
+            <dd>Pip mirrors no longer used by default, can stil be enabled with PIP_USE_MIRRORS=True. <em>Commit <a href="https://review.openstack.org/40623">40623</a> merged 13 Aug 2013</em></dd>
278
+            <dt>Configure Volume API v2</dt>
279
+            <dd>Configure both SQL and template backends with Volume API v2. <em>Commit <a href="https://review.openstack.org/22489">22489</a> merged 13 Aug 2013</em></dd>
280
+            <dt>Enable Tempest debug logging</dt>
281
+            <dd>Enable Tempest debug logging for the same output verbosity under testr. <em>Commit <a href="https://review.openstack.org/41113">41113</a> merged 12 Aug 2013</em></dd>
282
+            <dt>Configure Cinder for Ceilometer notifications</dt>
283
+            <dd>Enable Cinder to send notifications when Ceilometer is enabled. <em>Commit <a href="https://review.openstack.org/41108">41108</a> merged 12 Aug 2013</em></dd>
284
+            <dt>Support Heat-only configuration</dt>
285
+            <dd>Allows stack.sh to start a standalone Heat installation. <em>Commit <a href="https://review.openstack.org/39602">39602</a> merged 10 Aug 2013</em></dd>
286
+            <dt>Add tools/install_pip.sh</dt>
287
+            <dd>Install pip from source in order to get a current version rather than the out-of-date OS-supplied version <em>Commit <a href="https://review.openstack.org/39827">39827</a> merged 08 Aug 2013</em></dd>
288
+            <dt>Add call trace to error message</dt>
289
+            <dd>Display the bash call stack in die() output. <em>Commit <a href="https://review.openstack.org/39887">39887</a> merged 08 Aug 2013</em></dd>
290
+            <dt>Configure Keystone client in Cinder</dt>
291
+            <dd>Configure auth creds in Cinder to allow queries to Keystone. <em>Commit <a href="https://review.openstack.org/39747">39747</a> merged 07 Aug 2013</em></dd>
292
+            <dt>Update all repos to global requirements</dt>
293
+            <dd>Force update project repos to global requirements before tests.  <em>Commit <a href="https://review.openstack.org/35705">35705</a> merged 06 Aug 2013</em></dd>
294
+            <dt>Don't add 'bulk' middleware for Swift</dt>
295
+            <dd>The bulk middleware is already in the sample so don't add it. <em>Commit <a href="https://review.openstack.org/39826">39826</a> merged 06 Aug 2013</em></dd>
296
+            <dt>Enable using Apache as Swift frontend</dt>
297
+            <dd>Refactor apache functions into lib/apache; configure apache2 vhost and wsgi files for Swift proxy, account, container and object server. <em>Commit <a href="https://review.openstack.org/33946">33946</a> merged 02 Aug 2013</em></dd>
298
+            <dt>Launch Ceilometer alarm services</dt>
299
+            <dd>Add ceilometer-alarm-notify and ceilometer-alarm-eval to the Ceilometer services. <em>Commit <a href="https://review.openstack.org/39300">39300</a> merged 01 Aug 2013</em></dd>
300
+            <dt>Fix Tempest logging configuration</dt>
301
+            <dd>Correctly set the tempest output logging to dump all of tempest logs into a tempest.log file.  Also fixes logging in the gate no longer print every log message on the console. <em>Commit <a href="https://review.openstack.org/39571">39571</a> merged 31 Jul 2013</em></dd>
302
+            <dt>Install Oslo from source</dt>
303
+            <dd>Install the gradulated Oslo libraries from source into $DEST. <em>Commit <a href="https://review.openstack.org/39450">39450</a> merged 31 Jul 2013</em></dd>
304
+            <dt>Multiple fixes for cell support</dt>
305
+            <dd>Start Nova cell services; skip unsupported exercises; use 'default' security group in exercises. <em>Commit <a href="https://review.openstack.org/38897">38897</a> merged 29 Jul 2013</em></dd>
306
+            <dt>Add MySQL support for Ceilometer</dt>
307
+            <dd>Add MySQL storage support for Ceilometer. <em>Commit <a href="https://review.openstack.org/37413">37413</a> merged 19 Jul 2013</em></dd>
308
+            <dt>Create Compute API v3 endpoint</dt>
309
+            <dd>Configures SQL and templated backends for Compute API v3.  The service type is 'computev3'. <em>Commit <a href="https://review.openstack.org/33277">33277</a> merged 18 Jul 2013</em></dd>
310
+            <dt>Add Neutron VPNaaS support</dt>
311
+            <dd>Add Support for OpenStack Networking VPNaaS (IPSec) <em>Commit <a href="https://review.openstack.org/32174">32174</a> merged 15 Jul 2013</em></dd>
312
+            <dt>Configure Swift functional tests</dt>
313
+            <dd>The default Swift configuration now has functional tests properly configured. <em>Commit <a href="https://review.openstack.org/35793">35793</a> merged 12 Jul 2013</em></dd>
314
+            <dt>Enable all Nova notifications</dt>
315
+            <dd>Nova now sends all notification events to Ceilometer. <em>Commit <a href="https://review.openstack.org/35258">35258</a> merged 08 Jul 2013</em></dd>
316
+            <dt>Add IDENTITY_API_VERSION</dt>
317
+            <dd>IDENTITY_API_VERSION defaults to '2.0', enables setting '3' for API v3. <em>Commit <a href="https://review.openstack.org/34884">34884</a> merged 08 Jul 2013</em></dd>
318
+
319
+            <dt>Rename Qunatum repos to Neutron</dt>
320
+            <dd>Part of the project renaming process.  This does not change the process short names ('q-api', 'q-agt', etc) or the variable names starting with <code>Q_</code>.  Some Nova and Horizon changes remain to be completed.  The change has been applied to stable/grizzly (35860) and stable/folsom (35861). <em>Commit <a href="https://review.openstack.org/35981">35981, 35861, 35860, 35859</a> merged 07 Jul 2013</em></dd>
321
+            <dt>Direct installation of Python prerequisites</dt>
322
+            <dd>Python prereqs are now installed by pip (and not easy_install) directly from each projects <code>requirements.txt</code>. <em>Commit <a href="https://review.openstack.org/35696">35696</a> merged 07 Jul 2013</em></dd>
323
+            <dt>Enable Fedora 19</dt>
324
+            <dd>Fedora 19 is now supported directly. <em>Commit <a href="https://review.openstack.org/35071">35071</a> merged 03 Jul 2013</em></dd>
325
+            <dt>Fix Cinder clones on RHEL 6/CentOS</dt>
326
+            <dd>On RHEL 6/CentOS 6 cloned LVM volumes required more space for metadata storage. <em>Commit <a href="https://review.openstack.org/34640">34640</a> merged 28 Jun 2013</em></dd>
327
+            <dt>Use lower case section names in Quantum</dt>
328
+            <dd>The service code now supports lowercase section names, change DevStack to use them by default. <em>Commit <a href="https://review.openstack.org/34177">34177</a> merged 27 Jun 2013</em></dd>
329
+            <dt>Set default VOLUME_BACKING_FILE to 10Gb</dt>
330
+            <dd>The previous default of 5Gb was not large enough for some Tempest usage requirements. <em>Commit <a href="https://review.openstack.org/33885">33885</a> merged 21 Jun 2013</em></dd>
331
+            <dt>Use service role for service accounts</dt>
332
+            <dd>Use an account with service role assigned rather than a full admin account for swift, heat, ceilometer. Ceilometer was later restored to admin account in <a href="https://review.openstack.org/33838">33838</a>. <em>Commit <a href="https://review.openstack.org/31687">31687</a> merged 16 Jun 2013</em></dd>
333
+            <dt>Enable Nova API v3</dt>
334
+            <dd>Nova disables API v3 by default so explicitly enable it. <em>Commit <a href="https://review.openstack.org/311980">31190</a> merged 31 May 2013</em></dd>
335
+            <dt>Enable Debian support</dt>
336
+            <dd>Allows Devstack to run on Debian as an unsupported OS. <em>Commit <a href="https://review.openstack.org/28215">28215</a> merged 9 May 2013</em></dd>
337
+            <dt>Default SWIFT_DATA_DIR to use $DATA_DIR</dt>
338
+            <dd>Previously SWIFT_DATA_DIR was in $DEST/data. <em>Commit <a href="https://review.openstack.org/27749">27749</a> merged 3 May 2013</em></dd>
339
+            <dt>Set default S3_URL port to 8080</dt>
340
+            <dd>Set port to 8080 if swift3 is enabled, previously was nove objectstore value of 3333. <em>Commit <a href="https://review.openstack.org/27404">27404</a> merged 25 Apr 2013</em></dd>
341
+
342
+            <dt>Use example settings in horizon repo as local_settings.py</dt>
343
+            <dd>Removes <code>files/horizon_settings.py</code> and copies the same file from the Horizon repo. <em>Commit <a href="https://review.openstack.org/25510">25510</a> merged 28 Mar 2013</em></dd>
344
+            <dt>Add support for iso files as glance images</dt>
345
+            <dd>Add support for iso files as glance images <em>Commit <a href="https://review.openstack.org/25290">25290</a> merged 28 Mar 2013</em></dd>
346
+
347
+            <dt>Allow processes to run without screen</dt>
348
+            <dd>Add <code>USE_SCREEN=False</code> to <code>localrc</code> to cause all server processes to run without <code>screen</code>.  This is expected to be used primarily in the CI tests and should address the failures seen when <code>screen</code> does not start a process. <em>Commit <a href="https://review.openstack.org/23148">23148</a> merged 20 Mar 2013</em></dd>
349
+            <dt>Add clean.sh</dt>
350
+            <dd>This is intended to remove as much of the non-packaged (both OS and pip) remnants of DevStack from the system.  It is suitable for changing queue managers and databases as those packages are uninstalled.  It does not change the network configuration that Nova performs nor does it even attempt to undo anything that Quantum does. <em>Commit <a href="https://review.openstack.org/24360">24360</a> merged 15 Mar 2013</em></dd>
351
+            <dt>Add support for running a specific set of exercises</dt>
352
+            <dd>Set <code>RUN_EXERCISES</code> to a comma separated list of exercise names to run. <code>SKIP_EXERCISES</code> is ignored in this mode. <em>Commit <a href="https://review.openstack.org/23846">23846</a> merged 15 Mar 2013</em></dd>
353
+            <dt>Deprecate DATABASE_TYPE and use_database</dt>
354
+            <dd>This changes the way that a database is selected back to using only <code>ENABLED_SERVICES</code>.  Backward compatibility is maintained until after Grizzly is released. <em>Commit <a href="https://review.openstack.org/22635">22635</a> merged 22 Feb 2013</em></dd>
355
+            <dt>Create tools/install_prereqs.sh</dt>
356
+            <dd>This factors out the installation/upgrade of required OS packages so it can run independently of <code>stack.sh</code>.  It also adds a time marker so it does not run again within a set amount of time, default is 2 hours. Remove <code>.prereqs</code> to reset this timeout. <em>Commit <a href="https://review.openstack.org/21397">21397</a> merged 10 Feb 2013</em></dd>
357
+            <dt>Add initial LDAP support</dt>
358
+            <dd>Installs and configures OpenLDAP for Keystone.  Select by adding <code>enable_service ldap</code> and <code>KEYSTONE_IDENTITY_BACKEND=ldap</code> to <code>localrc</code>. <em>Commit <a href="https://review.openstack.org/20249">20249</a> merged 07 Feb 2013</em></dd>
359
+            <dt>Add variable to set Keystone token backend</dt>
360
+            <dd>Change the default Keystone token backend from <code>kvs</code> to <code>sql</code>by setting <code>KEYSTONE_TOKEN_BACKEND=sql</code>. <em>Commit <a href="https://review.openstack.org/20739">20739</a> merged 30 Jan 2013</em></dd>
361
+            <dt>Add Sheepdog support in Cinder</dt>
362
+            <dd>This enables using Sheepdog as a Cinder backend storage by setting <code>CINDER_DRIVER=sheepdog</code>. <em>Commit <a href="https://review.openstack.org/19931">19931</a> merged 18 Jan 2013</em></dd>
363
+            <dt>Support SPICE</dt>
364
+            <dd>Adds an 'n-spice' service (off by default) that supports SPICE in the Nova libvirt driver.  It also allows running in a SPICE only environment. <em>Commit <a href="https://review.openstack.org/19934">19934</a> merged 18 Jan 2013</em></dd>
365
+
366
+            <dt>Add a mechanism to automatically load additional projects at the end of <code>stack.sh</code></dt>
367
+            <dd>This differs from loca.sh in that scripts can be dropped into <code>local.d</code> and <code>stack.sh</code> will source them in alphanumeric order. <em>Commit <a href="https://review.openstack.org/19367">19367</a> merged 11 Jan 2013</em></dd>
368
+            <dt>Add support fir <code>baremetal</code> hypervisor</dt>
369
+            <dd>This is the first of a set of commits that enable baremetal support. <em>Commit <a href="https://review.openstack.org/15941">15941</a> merged 28 Dec 2012</em></dd>
370
+            <dt>Add support for OpenSuSE 12.2</dt>
371
+            <dd>This is actually just the commit to remove the need for FORCE=yes, OpenSuSE support has been coming along for a while. <em>Commit <a href="https://review.openstack.org/18479">18479</a> merged 27 Dec 2012</em></dd>
372
+            <dt>Save selected environment variables from <code>stack.sh</code> for later use</dt>
373
+            <dd>Write a set of environment variables to <code>.stackenv</code> so they can be quickly used by other scripts.  These are mostly the variables that are derived and not statically set. <code>.stackenv</code> is overwritten on every <code>stack.sh</code> run.<em>Commit <a href="https://review.openstack.org/18094">18094</a> merged 19 Dec 2012</em></dd>
374
+            <dt>Enable Tempest by default</dt>
375
+            <dd>Tempest is now downloaded and configured by default in DevStack.  This is to encourage more developers to use it as part of their workflow. Tempest configuration is now handled in <code>lib/tempest</code>; <code>tools/configure_tempest.sh</code> has been removed. <em>Commit <a href="https://review.openstack.org/17808">17808</a> merged 12 Dec 2012</em></dd>
376
+
377
+            <dt>Add PostgreSQL support</dt>
378
+            <dd>Adds an abstraction layer to database configuration and adds support for PostgreSQL under that.  MySQL is still the default.  To use add <code>use_database postgresql</code> to <code>localrc</code><em>Commit <a href="https://review.openstack.org/15224">15224</a> merged 05 Nov 2012</em></dd>
379
+            <dt>Add PKI token configuration support</dt>
380
+            <dd>Adds configuration KEYSTONE_TOKEN_FORMAT to select <code>PKI</code> or <code>UUID</code> token format. The default is <code>PKI</code>.<em>Commit <a href="https://review.openstack.org/14895">14895</a> merged 29 Oct 2012</em></dd>
381
+            <dt>Add Ubuntu Raring Ringtail support</dt>
382
+            <dd>Adds raring to the list of supported Ubuntu releases<em>Commit <a href="https://review.openstack.org/14692">14692</a> merged 24 Oct 2012</em></dd>
383
+            <dt>Add support for Quantum Ryu plugin</dt>
384
+            <dd>Ryu plugin lets Quantum link Open vSwitch and Ryu OpenFlow controller<em>Commit <a href="https://review.openstack.org/10117">10117</a> merged 20 Oct 2012</em></dd>
385
+            <dt>Configure and launch HEAT API</dt>
386
+            <dd>Creates a new enpoint using service type 'orchestration'.<em>Commit <a href="https://review.openstack.org/14195">14195</a> merged 10 Oct 2012</em></dd>
387
+            <dt>Fix upload image handling</dt>
388
+            <dd>Detect qcow, raw, vdi, vmdk image formats and sets Glance's disk format accordingly. <em>Commit <a href="https://review.openstack.org/13044">13044</a> merged 24 Sep 2012</em></dd>
389
+
390
+            <dt>Add non-verbose output mode</dt>
391
+            <dd>Set <code>VERBOSE=False</code> in <code>localrc</code> and see only periodic status messages on the screen.  The detailed output continues to be written to the log file if <code>LOGFILE</code> is set. <em>Commit <a href="https://review.openstack.org/12996/">12996</a> merged 17 Sep 2012</em></dt>
392
+
393
+            <dt>Move data directories out of source repos</dt>
394
+            <dd>Data for Glance (images and cache) and Nova (instances, all state info) have historically been in the source repo. They have been moved to <code>$DEST/data/&lt;project&gt;</code> by default. <em>Commit <a hred="https://review.openstack.org/12989/">12989</a> merged 14 Sep 2012</em></dd>
395
+
396
+            <dt>Change default Keystone backend to SQL</dt>
397
+            <dd>Keystone now uses the SQL backend by default enabling the use of the CRUD API; now <code>keystone service-create ...</code> works.  Set <code>KEYSTONE_CATALOG_BACKEND=template</code> to maintain the previous behaviour. <em>Commit <a href="https://review.openstack.org/12746/">12746</a> merged 12 Sep 2012</em></dd>
398
+
399
+            <dt>Set <code>FLAT_INTERFACE</code> for local-only use</dt>
400
+            <dd>Allow <code>FLAT_INTERFACE</code> to be defined as <code>""</code> to prevent the <code>HOST_IP</code> from being moved to <code>br100</code>. <em>Commit <a href="https://review.openstack.org/12671/">12671</a> merged 09 Sep 2012</em></dd>
401
+
402
+            <dt>Add support for Quantum L3 agent</dt>
403
+            <dd>Only available with OpenVSwitch plugin. <em>Commit <a href="https://review.openstack.org/11380/">11380</a> merged 08 Sep 2012</em></dd>
404
+
405
+            <dt>Configure Glance caching</dt>
406
+            <dd>Configure Glance caching and cache management. <em>Commit <a href="https://review.openstack.org/12207/">12207</a> merged 07 Sep 2012</em></dd>
407
+
408
+            <dt>Add ZeroMQ RPC backend</dt>
409
+            <dd>Support ZeroMQ in addition to RabbitMQ and Qpid. But only one at a time. <em>Commit <a href="https://review.openstack.org/9278/">9278</a> merged 01 Sep 2012</em></dd>
410
+
411
+            <dt>Add Heat support</dt>
412
+            <dd>Support Heat via the standard <code>ENABLED_SERVICES</code> configuration. <em>Commit <a href="https://review.openstack.org/11266/">11266</a> merged 28 Aug 2012</em></dd>
413
+
414
+            <dt>Ceilometer is now supported.</dt>
415
+            <dd>There is a description of how to get stared with it at <a href="https://lists.launchpad.net/openstack/msg15940.html">https://lists.launchpad.net/openstack/msg15940.html</a>. <em>Commit <a href="https://review.openstack.org/10363">10363</a> merged 17 Aug 2012</em></dd>
416
+
417
+            <dt>Colored logs in cinder</dt>
418
+            <dd>Chmouel has brought Vishy's colored log file patch to Cinder. <em>Commit <a href="https://review.openstack.org/10769">10769</a> merged 16 Aug 2012</em></dd>
419
+
420
+            <dt>Keystone auth middleware from Swift</dt>
421
+            <dd>Swift now uses <code>keystoneauth</code> by default. Commit <a href="https://review.openstack.org/10876">10876</a> merged 16 Aug 2012</dd>
422
+
423
+            <dt>Add support for <code>NO_PROXY</code></dt>
424
+            <dd>Added support for the standard no_proxy environment variable. <em>Commit <a href="https://review.openstack.org/10264">10264</a> merged 10 Aug 2012</em></dd>
425
+
426
+            <dt>Use default route to find <code>HOST_IP</code></dt>
427
+            <dd>This changed the login for hunting down the value of <code>HOST_IP</code> to look on the interface that has the default route. <em>Commit <a href="https://review.openstack.org/9291">9291</a> merged 10 Aug 2012</em></dd>
428
+
429
+            <dt>Enable testing of OpenVZ guests</dt>
430
+            <dd>Allows using OpenVZ virtualization layer. <em>Commit <a href="https://review.openstack.org/10317">10317</a> merged 07 Aug 2012</em></dd>
431
+
432
+            <dt>Cinder is the default volume service</dt>
433
+            <dd>DevStack is now configured to use Cinder as its volume service by default. <em>Commit <a hred="https://review.openstack.org/9662">9662</a> merged 27 Jul 2012</em></dd>
434
+
435
+            <dt>Increase size of default volume backing file</dt>
436
+            <dd>The volume backing file is now 5Gb by default.  It can still be set using <code>VOLUME_BACKING_FILE_SIZE</code> in <code>localrc</code>. <em>Commit <a href="https://review.openstack.org/9837">9837</a> merged 19 Jul 2012</em></dd>
437
+
438
+            <dt>Configure pip cache location</dt>
439
+            <dd>Set <code>PIP_DOWNLOAD_CACHE</code> to the location of a root-writable directory to cache downloaded packages. <em>Commit <a href="https://review.openstack.org/9766">9766</a> merged 16 Jul 2012</em></dd>
440
+
441
+            <dt>Add functions to manipulate <code>ENABLED_SERVICES</code>
442
+            <dd>Now <code>ENABLED_SERVICES</code> can be edited in <code>localrc</code> by using <code>enable_service()</code> and <code>disable_service()</code>.  <em>Commit <a href="https://review.openstack.org/9407">9407</a> merged 13 Jul 2012</em></dd>
443
+
444
+            <dt>Change default Nova virt driver configuration</dt>
445
+            <dd>Change the Nova configuration to use <code>compute_driver</code> rather than <code>connection_type</code>. <em>Commit <a href="https://review.openstack.org/9635">9635</a> merged 13 Jul 2012</em></dd>
446
+
447
+            <dt>Add support for Keystone PKI</dt>
448
+            <dd>Initializes Keystone's PKI configuration to support delegation and scaling. <em>Commit <a href="https://review.openstack.org/9240">9240</a> merged 13 Jul 2012</em></dd>
449
+
450
+            <dt>Disable Swift S3 support by default</dt>
451
+            <dd>Swift's S3 API support can be enabled by adding <code>swift3</code> to <code>ENABLED_SERVICES</code>.  Commit <a href="https://review.openstack.org/9346">9346</a> merged 12 Jul 2012</em></dd>
452
+
453
+            <dt>Set libvirt CPU mode</dt>
454
+            <dd>Force <code>libvirt_cpu_move=none</code> to work around some nested virtualization issues.  <em>Commit <a href="https://review.openstack.org/9718">9718</a> merged 12 Jul 2012</em></dd>
455
+
456
+            <dt>Support Nova rootwrap</dt>
457
+            <dd>Add support for Nova rootwrap configuration. <em>Commits <a href="https://review.openstack.org/8842/">8842</a> merged 25 Jun 2012 and <a href="https://review.openstack.org/8750/">8750</a> merged 20 Jun 2012</em></dd>
458
+
459
+            <dt>Add Cinder support</dt>
460
+            <dd>Cinder can now be enabled by adding <code>c-api,c-sch,c-vol</code> to <code>ENABLED-sERVICES</code>. This also changed a couple of defaults: <code>VOLUME_GROUP</code> is now <code>stack-volumes</code> and <code>VOLUME_BACKING_FILE</code> is now <code>${DEST}/data/${VOLUME_GROUP}-backing-file</code>. <em>Commit <a href="https://review.openstack.org/7042">7042</a> merged 20 Jun 2012</em></dd>
461
+
462
+            <dt>Set default image for exercises</dt>
463
+            <dd>Set <code>DEFAULT_IMAGE_NAME</code> in <code>stackrc</code> to the cirros images downloaded.  This avoids the ambiguous search for an 'ami'.  <em>Commit <a href="https://review.openstack.org/7910">7910</a> merged 14 Jun 2012</em></dd>
464
+
465
+            <dt>Use default Swift config files</dt>
466
+            <dd>Use the configuration files shipped with Swift source rather than carrying files in the DevStack sources. <em>Commit <a href="https://review.openstack.org/8223">8223</a> merged 14 Jun 2012</em></dd>
467
+
468
+            <dt>Install Swift client</dt>
469
+            <dd>Install the new Swift client when Swift is enabled. <em>Commit <a href="https://review.openstack.org/7663">7663</a> merged 11 Jun 2012</em></dd>
470
+
471
+            <dt>Use pip to install Python dependencies</dt>
472
+            <dd>Use the dependencies in the <code>*.egg-info/requires.txt</code> and <code>*.egg-info/dependency_links.txt</code> to prevent <code>easy_install</code> from resolving the dependencies. <em>Commit <a href="https://review.openstack.org/8289">8289</a> merged 07 Jun 2012</em></dd>
473
+
474
+            <dt>Remove support for DevStack pip dependencies</dt>
475
+            <dd>Remove DevStack Python dependency files <code>files/pips/*</code> and handle Python dependencies through <code>tools/pip-requires</code>. <em>Commit <a href="https://review.openstack.org/8263">8263</a> merged 07 Jun 2012</em></dd>
476
+
477
+            <dt>Update XenServer support</dt>
478
+            <dd>Updates to work with <code>xcp-xapi</code> package on Ubuntu 12.04 and fix a number of other minor install problems. <em>Commits <a href="https://review.openstack.org/7673/">7673</a> and <a href="https://review.openstack.org/7449/">7449</a> merged 01 Jun 2012</em></dd>
479
+
480
+            <dt>Enable Quantum multi-node</dt>
481
+            <dd>Enable running Quantum agents on multiple nodes. <em>Commit <a href="https://review.openstack.org/7001">7001</a> merged 26 May 2012</em></dd>
482
+
483
+            <dt>Reinitialize Swift data store</dt>
484
+            <dd>Create a new XFS filesystem on the Swift data store on every <code>stack.sh</code> run. <em>Commit <a href="https://review.openstack.org/7554">7554</a> merged 22 May 2012</em></dd>
485
+
486
+            <dt>Add support for Qpid</dt>
487
+            <dd>Configure Qpid RPC by replacing <code>rabbit</code> with <code>qpid</code> in <code>ENABLED_SERVICES</code>. <em>Commit <a href="https://review.openstack.org/6501">6501</a> merged 17 May 2012</em></dd>
488
+
489
+            <dt>Glance uses Swift if enabled</dt>
490
+            <dd>If Swift is enabled Glance will store images there by default. <em>Commit <a href="https://review.openstack.org/7277">7277</a> merged 15 May 2012</em></dd>
491
+
492
+            <dt>Add Quantum linuxbridge support</dt>
493
+            <dd>Support using linuxbridge in Quantum. <em>Commit <a href="https://review.openstack.org/7300">7300</a> merged 10 May 2012</em></dd>
494
+
495
+            <dt>Change Nova volume name template</dt>
496
+            <dd>Change Nova's <code>volume_name_template</code> to <code>${VOLUME_NAME_PREFIX}%s</code>. <em>Commit <a href="https://review.openstack.org/7004">7004</a> merged 02 May 2012</em></dd>
497
+
498
+            <dt>Change MySQL engine default</dt>
499
+            <dd>Use InnoDB engine in MySQL by default. <em>Commit <a href="https://review.openstack.org/6185">6185</a> merged 30 Apr 2012</em></dd>
500
+
501
+            <dt>Add Glance client</dt>
502
+            <dd>Add new <code>python-glanceclient</code> to override the clinet in the Glance repo. <em>Config <a href="https://review.openstack.org/6533">6533</a> merged 26 Apr 2012</em></dd>
503
+          </dl>
504
+        </div>        
505
+
506
+      </section>
507
+
508
+      <footer>
509
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
510
+      </footer>
511
+
512
+    </div> <!-- /container -->
513
+  </body>
514
+</html>
0 515
new file mode 100644
... ...
@@ -0,0 +1,243 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Overview</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+
45
+      <section id="overview" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>Configuration <small>Making it go my way</small></h2>
49
+          <p>DevStack has always tried to be mostly-functional with a minimal amount of configuration.  The number of options has ballooned as projects add features, new projects added and more combinations need to be tested.  Historically DevStack obtained all local configuration and customizations from a <code>localrc</code> file.  The number of configuration variables that are simply passed-through to the individual project configuration files is also increasing.  The old mechanism for this (<code>EXTRAS_OPTS</code> and friends) required specific code for each file and did not scale well.</p>
50
+          <p>In Oct 2013 a new configuration method was introduced (in <a href="https://review.openstack.org/#/c/46768/">review 46768</a>) to hopefully simplify this process and meet the following goals:</p>
51
+          <ul>
52
+            <li>contain all non-default local configuration in a single file</li>
53
+            <li>be backward-compatible with <code>localrc</code> to smooth the transition process</li>
54
+            <li>allow settings in arbitrary configuration files to be changed</li>
55
+          </ul>
56
+
57
+          <h3>local.conf</h3>
58
+          <p>The new configuration file is <code>local.conf</code> and resides in the root DevStack directory like the old <code>localrc</code> file.  It is a modified INI format file that introduces a meta-section header to carry additional information regarding the configuration files to be changed.</p>
59
+
60
+          <p>The new header is similar to a normal INI section header but with two '[[ ]]' chars and two internal fields separated by a pipe ('|'):</p>
61
+<pre>[[ &lt;phase&gt; | &lt;config-file-name&gt; ]]
62
+</pre>
63
+
64
+          <p>where <code>&lt;phase&gt;</code> is one of a set of phase names defined by <code>stack.sh</code> and <code>&lt;config-file-name&gt;</code> is the configuration filename.  The filename is eval'ed in the <code>stack.sh</code> context so all environment variables are available and may be used.  Using the project config file variables in the header is strongly suggested (see the <code>NOVA_CONF</code> example below).  If the path of the config file does not exist it is skipped.</p>
65
+
66
+          <p>The defined phases are:</p>
67
+          <ul>
68
+            <li><strong>local</strong> - extracts <code>localrc</code> from <code>local.conf</code> before <code>stackrc</code> is sourced</li>
69
+            <li><strong>post-config</strong> - runs after the layer 2 services are configured and before they are started</li>
70
+            <li><strong>extra</strong> - runs after services are started and before any files in <code>extra.d</code> are executed
71
+          </ul>
72
+
73
+          <p>The file is processed strictly in sequence; meta-sections may be specified more than once but if any settings are duplicated the last to appear in the file will be used.</p>
74
+<pre>[[post-config|$NOVA_CONF]]
75
+[DEFAULT]
76
+use_syslog = True
77
+
78
+[osapi_v3]
79
+enabled = False
80
+</pre>
81
+
82
+          <p>A specific meta-section <code>local|localrc</code> is used to
83
+          provide a default <code>localrc</code> file (actually
84
+          <code>.localrc.auto</code>).  This allows all custom settings
85
+          for DevStack to be contained in a single file.  If <code>localrc</code>
86
+          exists it will be used instead to preserve backward-compatibility.  More
87
+          details on the <a href="localrc.html">contents of localrc</a> are available.</p>
88
+<pre>[[local|localrc]]
89
+FIXED_RANGE=10.254.1.0/24
90
+ADMIN_PASSWORD=speciale
91
+LOGFILE=$DEST/logs/stack.sh.log
92
+</pre>
93
+
94
+          <p>Note that <code>Q_PLUGIN_CONF_FILE</code> is unique in that it is assumed to <em>NOT</em> start with a <code>/</code> (slash) character.  A slash will need to be added:</p>
95
+<pre>[[post-config|/$Q_PLUGIN_CONF_FILE]]
96
+</pre>
97
+
98
+          <p>The existing ``EXTRAS_OPTS`` and similar variables are now deprecated.  If used a warning will be printed at the end of the <code>stack.sh</code> run.</p>
99
+
100
+          <a id="minimal"></a>
101
+          <h3>Minimal Configuration</h3>
102
+          <p>While <code>stack.sh</code> is happy to run without a <code>localrc</code> section in <code>local.conf</code>, devlife is better when there are a few minimal variables set. This is an example of a minimal configuration that touches the values that most often need to be set.</p>
103
+          <ul>
104
+            <li>no logging</li>
105
+            <li>pre-set the passwords to prevent interactive prompts</li>
106
+            <li>move network ranges away from the local network (<code>FIXED_RANGE</code> and <code>FLOATING_RANGE</code>, commented out below)</li>
107
+            <li>set the host IP if detection is unreliable (<code>HOST_IP</code>, commented out below)</li>
108
+          </ul>
109
+          <pre>[[local|localrc]]
110
+ADMIN_PASSWORD=secrete
111
+DATABASE_PASSWORD=$ADMIN_PASSWORD
112
+RABBIT_PASSWORD=$ADMIN_PASSWORD
113
+SERVICE_PASSWORD=$ADMIN_PASSWORD
114
+SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
115
+#FIXED_RANGE=172.31.1.0/24
116
+#FLOATING_RANGE=192.168.20.0/25
117
+#HOST_IP=10.3.4.5</pre>
118
+          <p>If the <code>*_PASSWORD</code> variables are not set here you will be prompted to enter values for them by <code>stack.sh</code>.</p>
119
+          <p>The network ranges must not overlap with any networks in use on the host.  Overlap is not uncommon as RFC-1918 'private' ranges are commonly used for both the local networking and Nova's fixed and floating ranges.</p>
120
+          <p><code>HOST_IP</code> is normally detected on the first run of <code>stack.sh</code> but often is indeterminate on later runs due to the IP being moved from an Ethernet integace to a bridge on the host.  Setting it here also makes it available for <code>openrc</code> to set <code>OS_AUTH_URL</code>.  <code>HOST_IP</code> is not set by default.</p>
121
+
122
+          <h3>Common Configuration Variables</h3>
123
+          <dl>
124
+            <dt>Set DevStack install directory</dt>
125
+            <dd><em>Default: <code>DEST=/opt/stack</code></em><br />
126
+            The DevStack install directory is set by the <code>DEST</code> variable. By setting it early in the <code>localrc</code> section you can reference it in later variables.  It can be useful to set it even though it is not changed from the default value.
127
+            <pre>DEST=/opt/stack</pre></dd>
128
+
129
+            <dt>stack.sh logging</dt>
130
+            <dd><em>Defaults: <code>LOGFILE="" LOGDAYS=7 LOG_COLOR=True</code></em><br />
131
+            By default <code>stack.sh</code> output is only written to the console where is runs.  It can be sent to a file in addition to the console by setting <code>LOGFILE</code> to the fully-qualified name of the destination log file.  A timestamp will be appended to the given filename for each run of <code>stack.sh</code>.
132
+            <pre>LOGFILE=$DEST/logs/stack.sh.log</pre>
133
+            Old log files are cleaned automatically if <code>LOGDAYS</code> is set to the number of days of old log files to keep.
134
+            <pre>LOGDAYS=1</pre>
135
+            The some of the project logs (Nova, Cinder, etc) will be colorized by default (if <code>SYSLOG</code> is not set below); this can be turned off by setting <code>LOG_COLOR</code> False.
136
+            <pre>LOG_COLOR=False</pre></dd>
137
+
138
+            <dt>Screen logging</dt>
139
+            <dd><em>Default: <code>SCREEN_LOGDIR=""</code></em><br />
140
+            By default DevStack runs the OpenStack services using <code>screen</code> which is useful for watching log and debug output.  However, in automated testing the interactive <code>screen</code> sessions may not be available after the fact; setting <code>SCREEN_LOGDIR</code> enables logging of the <code>screen</code> sessions in the specified diretory.  There will be one file per <code>screen</code> session named for the session name and a timestamp.  
141
+            <pre>SCREEN_LOGDIR=$DEST/logs/screen</pre>
142
+            <em>Note the use of <code>DEST</code> to locate the main install directory; this is why we suggest setting it in <code>local.conf</code>.</em></dd><br />
143
+
144
+            <dt>One syslog to bind them all</dt>
145
+            <dd><em>Default: <code>SYSLOG=False SYSLOG_HOST=$HOST_IP SYSLOG_PORT=516</code></em><br />
146
+            Logging all services to a single syslog can be convenient.  Enable syslogging by seting <code>SYSLOG</code> to <code>True</code>. If the destination log host is not localhost <code>SYSLOG_HOST</code> and <code>SYSLOG_PORT</code> can be used to direct the message stream to the log host.
147
+            <pre>SYSLOG=True
148
+SYSLOG_HOST=$HOST_IP
149
+SYSLOG_PORT=516</pre></dd>
150
+
151
+            <dt>A clean install every time</dt>
152
+            <dd><em>Default: <code>RECLONE=""</code></em><br />
153
+            By default <code>stack.sh</code> only clones the project repos if they do not exist in <code>$DEST</code>.  <code>stack.sh</code> will freshen each repo on each run if <code>RECLONE</code> is set to <code>yes</code>. This avoids having to manually remove repos in order to get the current branch from <code>$GIT_BASE</code>.
154
+            <pre>RECLONE=yes</code></dd>
155
+
156
+            <dt>Swift</dt>
157
+            <dd><em>Default: <code>SWIFT_HASH="" SWIFT_REPLICAS=1 SWIFT_DATA_DIR=$DEST/data/swift</code></em><br />
158
+            Swift is now used as the back-end for the S3-like object store.  When enabled Nova's objectstore (n-obj in <code>ENABLED_SERVICES</code>) is automatically disabled. Enable Swift by adding it services to <code>ENABLED_SERVICES</code>:
159
+            <pre>enable_service s-proxy s-object s-container s-account</pre>
160
+            Setting Swift's hash value is required and you will be prompted for it if Swift is enabled so just set it to something already:
161
+            <pre>SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5</pre>
162
+            For development purposes the default number of replicas is set to <code>1</code> to reduce the overhead required.  To better simulate a production deployment set this to <code>3</code> or more.
163
+            <pre>SWIFT_REPLICAS=3</pre>
164
+            The data for Swift is stored in the source tree by default
165
+            (in <code>$DEST/swift/data</code>) and can be moved by setting
166
+            <code>SWIFT_DATA_DIR</code>.  The specified directory will be created if it does not exist.
167
+            <pre>SWIFT_DATA_DIR=$DEST/data/swift</pre>
168
+            <em>Note: Previously just enabling <code>swift</code> was sufficient to start the Swift services.  That does not provide proper service granularity, particularly in multi-host configurations, and is considered deprecated.  Some service combination tests now check for specific Swift services and the old blanket acceptance will longer work correctly.</em>
169
+            </dd>
170
+
171
+            <dt>Service Catalog Backend</dt>
172
+            <dd><em>Default: <code>KEYSTONE_CATALOG_BACKEND=sql</code></em><br />
173
+            DevStack uses Keystone's <code>sql</code> service catalog backend.  An alternate <code>template</code> backend is also available.  However, it does not support the <code>service-*</code> and <code>endpoint-*</code> commands of the <code>keystone</code> CLI.  To
174
+            do so requires the <code>sql</code> backend be enabled:
175
+            <pre>KEYSTONE_CATALOG_BACKEND=template</pre>
176
+            DevStack's default configuration in <code>sql</code> mode is set in
177
+            <code>files/keystone_data.sh</code></dd>
178
+
179
+            <dt>Cinder</dt>
180
+            <dd><em>Default: <code>VOLUME_GROUP="stack-volumes" VOLUME_NAME_PREFIX="volume-" VOLUME_BACKING_FILE_SIZE=10250M</code></em><br />
181
+            The logical volume group used to hold the Cinder-managed volumes is set by <code>VOLUME_GROUP</code>, the logical volume name prefix is set with <code>VOLUME_NAME_PREFIX</code> and the size of the volume backing file is set with <code>VOLUME_BACKING_FILE_SIZE</code>.
182
+            <pre>VOLUME_GROUP="stack-volumes"
183
+VOLUME_NAME_PREFIX="volume-"
184
+VOLUME_BACKING_FILE_SIZE=10250M</pre></dd>
185
+
186
+            <dt>Multi-host DevStack</dt>
187
+            <dd><em>Default: <code>MULTI_HOST=False</code></em><br />
188
+            Running DevStack with multiple hosts requires a custom <code>local.conf</code> section for each host.  The master is the same as a single host installation with <code>MULTI_HOST=True</code>.  The slaves have fewer services enabled and a couple of host variables pointing to the master.  
189
+            <br /><br />
190
+            <strong>Master</strong>
191
+            <pre>MULTI_HOST=True</pre>
192
+
193
+            <strong>Slave</strong>
194
+            <pre>MYSQL_HOST=w.x.y.z
195
+RABBIT_HOST=w.x.y.z
196
+GLANCE_HOSTPORT=w.x.y.z:9292
197
+ENABLED_SERVICES=n-vol,n-cpu,n-net,n-api</pre></dd>
198
+
199
+            <dt>API rate limits</dt>
200
+            <dd><em>Default: <code>API_RATE_LIMIT=True</code><br />
201
+            Integration tests such as Tempest will likely run afoul of the default rate limits configured for Nova.  Turn off rate limiting during testing by setting <code>API_RATE_LIMIT=False</code>.
202
+            <pre>API_RATE_LIMIT=False</pre></dd>
203
+          </dl>
204
+
205
+          <h3>Examples</h3>
206
+          <ul>
207
+            <li>Convert EXTRA_OPTS from (<code>localrc</code>):
208
+<pre>EXTRA_OPTS=api_rate_limit=False
209
+</pre>
210
+    to (<code>local.conf</code>):
211
+<pre>[[post-config|$NOVA_CONF]]
212
+[DEFAULT]
213
+api_rate_limit = False
214
+</pre></li>
215
+            <li>Eliminate a Cinder pass-through (<code>CINDER_PERIODIC_INTERVAL</code>):
216
+<pre>[[post-config|$CINDER_CONF]]
217
+[DEFAULT]
218
+periodic_interval = 60
219
+</pre></li>
220
+            <li>Sample <code>local.conf</code> with screen logging enabled:
221
+<pre>[[local|localrc]]
222
+FIXED_RANGE=10.254.1.0/24
223
+NETWORK_GATEWAY=10.254.1.1
224
+LOGDAYS=1
225
+LOGFILE=$DEST/logs/stack.sh.log
226
+SCREEN_LOGDIR=$DEST/logs/screen
227
+ADMIN_PASSWORD=quiet
228
+DATABASE_PASSWORD=$ADMIN_PASSWORD
229
+RABBIT_PASSWORD=$ADMIN_PASSWORD
230
+SERVICE_PASSWORD=$ADMIN_PASSWORD
231
+SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50</pre></li>
232
+          </ul>
233
+
234
+      </section>
235
+
236
+      <footer>
237
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
238
+      </footer>
239
+
240
+    </div> <!-- /container -->
241
+  </body>
242
+</html>
0 243
new file mode 100644
... ...
@@ -0,0 +1,87 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Overview</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+
45
+      <section id="overview" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>Contributing <small>Help us help you</small></h2>
49
+          <p>DevStack uses the standard OpenStack contribution process as outlined in <a href="https://wiki.openstack.org/wiki/How_To_Contribute">the OpenStack wiki 'How To Contribute'</a>.  This means that you will need to meet the requirements of the Contribututors License Agreement (CLA).  If you have already done that for another OpenStack project you are good to go.</p>
50
+
51
+          <h3>Things To Know</h3>
52
+
53
+          <br /><strong>Where Things Are</strong>
54
+          <p>The official DevStack repository is located at <code>git://github.com/openstack-dev/devstack.git</code> and <code>git://git.openstack.org/openstack-dev/devstack.git</code>, both mirrors of the official repo maintained by Gerrit.</p>
55
+          <p>The <a href="https://blueprints.launchpad.net/devstack">blueprint</a> and <a href="https://bugs.launchpad.net/devstack">bug trackers</a> are on Launchpad.  It should be noted that DevStack generally does not use these as strongly as other projects, but we're trying to change that.</p>
56
+          <p>The <a href="https://review.openstack.org/#/q/project:openstack-dev/devstack,n,z">Gerrit review queue</a> is, however, used for all commits except for the text of this website.  That should also change in the near future.</p>
57
+
58
+          <br /><strong>HACKING.rst</strong>
59
+          <p>Like most OpenStack projects, DevStack includes a <code>HACKING.rst</code> file that describes the layout, style and conventions of the project.  Because <code>HACKING.rst</code> is in the main DevStack repo it is considered authoritative.  Much of the content on this page is taken from there.</p>
60
+
61
+          <br /><strong>bash8 Formatting</strong>
62
+          <p>Around the time of the OpenStack Havana release we added a tool to do style checking in DevStack similar to what pep8/flake8 do for Python projects.  It is still _very_ simplistic, focusing mostly on stray whitespace to help prevent -1 on reviews that are otherwise acceptable.  Oddly enough it is called <code>bash8</code>.  It will be expanded to enforce some of the documentation rules in comments that are used in formatting the script pages for devstack.org and possibly even simple code formatting.  Run it on the entire project with <code>./run_tests.sh</code>.</p>
63
+
64
+          <h3>Code</h3>
65
+
66
+          <br /><strong>Repo Layout</strong>
67
+          <p>The DevStack repo generally keeps all of the primary scripts at the root level.</p>
68
+          <p><code>exercises</code> - contains the test scripts used to validate and demonstrate some OpenStack functions.  These scripts know how to exit early or skip services that are not enabled.</p>
69
+          <p><code>extras.d</code> - contains the dispatch scripts called by the hooks in <code>stack.sh</code>, <code>unstack.sh</code> and <code>clean.sh</code>.  See <a href="plugins.html">the plugins docs</a> for more information.</p>
70
+          <p><code>files</code> - contains a variety of otherwise lost files used in configuring and operating DevStack.  This includes templates for configuration files and the system dependency information.  This is also where image files are downloaded and expanded if necessary.</p>
71
+          <p><code>lib</code> - contains the sub-scripts specific to each project.  This is where the work of managing a project's services is located.  Each top-level project (Keystone, Nova, etc) has a file here.  Additionally there are some for system services and project plugins.</p>
72
+          <p><code>samples</code> - contains a sample of the local files not included in the DevStack repo.</p>
73
+          <p><code>tests</code> - the DevStack test suite is rather sparse, mostly consisting of test of specific fragile functions in the <code>functions</code> file.</p>
74
+          <p><code>tools</code> - contains a collection of stand-alone scripts, some of which have aged a bit (does anyone still do pamdisk installs?).  While these may reference the top-level DevStack configuration they can generally be run alone.  There are also some sub-directories to support specific environments such as XenServer and Docker.</p>
75
+          
76
+
77
+
78
+      </section>
79
+
80
+      <footer>
81
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
82
+      </footer>
83
+
84
+    </div> <!-- /container -->
85
+  </body>
86
+</html>
0 87
new file mode 100644
... ...
@@ -0,0 +1,94 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - eucarc</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>eucarc <small>EC2 settings</small></h2>
48
+          <p><code>eucarc</code> creates EC2 credentials for the current user as
49
+            defined by <code>OS_TENANT_NAME:OS_USERNAME</code>.
50
+            <code>eucarc</code> sources <code>openrc</code> at the beginning
51
+            (which in turn sources <code>stackrc</code> and <code>localrc</code>)
52
+            in order to set credentials to create EC2 credentials in Keystone.
53
+        </div>
54
+        <dl>
55
+
56
+          <dt>EC2_URL</dt>
57
+          <dd>Set the EC2 url for euca2ools.  The endpoint is extracted from the
58
+            service catalog for <code>OS_TENANT_NAME:OS_USERNAME</code>.
59
+            <pre>EC2_URL=$(keystone catalog --service ec2 | awk '/ publicURL / { print $4 }')</pre></dd>
60
+
61
+          <dt>S3_URL</dt>
62
+          <dd>Set the S3 endpoint for euca2ools.  The endpoint is extracted from the
63
+            service catalog for <code>OS_TENANT_NAME:OS_USERNAME</code>.
64
+            <pre>export S3_URL=$(keystone catalog --service s3 | awk '/ publicURL / { print $4 }')</pre></dd>
65
+
66
+          <dt>EC2_ACCESS_KEY, EC2_SECRET_KEY</dt>
67
+          <dd>Create EC2 credentials for the current tenant:user in Keystone.
68
+            <pre>CREDS=$(keystone ec2-credentials-create)
69
+export EC2_ACCESS_KEY=$(echo "$CREDS" | awk '/ access / { print $4 }')
70
+export EC2_SECRET_KEY=$(echo "$CREDS" | awk '/ secret / { print $4 }')</pre></dd>
71
+
72
+          <dt>Certificates for Bundling</dt>
73
+          <dd>Euca2ools requires certificate files to enable bundle uploading.
74
+            The exercise script <code>exercises/bundle.sh</code> demonstrated
75
+            retrieving certificates using the Nova CLI.
76
+            <pre>EC2_PRIVATE_KEY=pk.pem
77
+EC2_CERT=cert.pem
78
+NOVA_CERT=cacert.pem
79
+EUCALYPTUS_CERT=${NOVA_CERT}</pre></dd>
80
+
81
+        </dl>
82
+      </section
83
+
84
+      <footer>
85
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
86
+        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
87
+        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
88
+      </footer>
89
+
90
+    </div> <!-- /container -->
91
+
92
+  </body>
93
+</html>
0 94
new file mode 100644
... ...
@@ -0,0 +1,88 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - exerciserc</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>exerciserc <small>Exercise settings</small></h2>
48
+          <p><code>exerciserc</code> is used to configure settings for the
49
+          exercise scripts.  The values shown below are the default values.
50
+          Thse can all be overridden by setting them in the <code>localrc</code>
51
+          section.</p>
52
+        </div>
53
+        <dl>
54
+
55
+          <dt>ACTIVE_TIMEOUT</dt>
56
+          <dd>Max time to wait while vm goes from build to active state
57
+            <pre>ACTIVE_TIMEOUT==30</pre></dd>
58
+
59
+          <dt>ASSOCIATE_TIMEOUT</dt>
60
+          <dd>Max time to wait for proper IP association and dis-association.
61
+            <pre>ASSOCIATE_TIMEOUT=15</pre></dd>
62
+
63
+          <dt>BOOT_TIMEOUT</dt>
64
+          <dd>Max time till the vm is bootable
65
+            <pre>BOOT_TIMEOUT=30</pre></dd>
66
+
67
+          <dt>RUNNING_TIMEOUT</dt>
68
+          <dd>Max time from run instance command until it is running
69
+            <pre>RUNNING_TIMEOUT=$(($BOOT_TIMEOUT + $ACTIVE_TIMEOUT))</pre></dd>
70
+
71
+          <dt>TERMINATE_TIMEOUT</dt>
72
+          <dd>Max time to wait for a vm to terminate
73
+            <pre>TERMINATE_TIMEOUT=30</pre></dd>
74
+
75
+        </dl>
76
+      </section
77
+
78
+      <footer>
79
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
80
+        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
81
+        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
82
+      </footer>
83
+
84
+    </div> <!-- /container -->
85
+
86
+  </body>
87
+</html>
0 88
new file mode 100644
... ...
@@ -0,0 +1,169 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Frequently Asked Questions</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+      
45
+      <section id="faq" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>FAQ: Using DevStack <small>Making to behave</small></h2>
49
+
50
+          <ul>
51
+            <li><a href="#general">General Questions</a></li>
52
+            <li><a href="#ops_conf">Operation and Configuration</a></li>
53
+            <li><a href="#misc">Miscellaneous</a></li>
54
+          </ul>
55
+
56
+          <h3><a name="general">General Questions</a></h3>
57
+
58
+          <dl class='pull-left'>
59
+            <dt>Q: Can I use DevStack for production?</dt>
60
+            <dd>A: No.  We mean it.  Really.  DevStack makes some implementation choices that are not appropriate for production deployments.  We warned you!</dd>
61
+
62
+            <dt>Q: Then why selinux in enforcing mode?</dt>
63
+            <dd>A: That is the default on current Fedora and RHEL releases.  DevStack has (rightly so) a bad reputation for its security practices; it has always been meant as a development tool first and system integration later.  This is changing as the security issues around OpenStack's use of root (for example) have been tightened and developers need to be better equipped to work in these environments.  <code>stack.sh</code>'s use of root is primarily to support the activities that would be handled by packaging in "real" deployments.  To remove additional protections that will be desired/required in production would be a step backward.</dd>
64
+
65
+            <dt>Q: But selinux is disabled in RHEL 6!</dt>
66
+            <dd>A: Today it is, yes.  That is a specific exception that certain DevStack contributors fought strongly against.  The primary reason it was allowed was to support using RHEL6 as the Python 2.6 test platform and that took priority time-wise.  This will not be the case with RHEL 7.</dd>
67
+
68
+            <dt>Q: Why a shell script, why not chef/puppet/...</dt>
69
+            <dd>A: The script is meant to be read by humans (as well as ran by computers); it is the primary documentation after all.  Using a recipe system requires everyone to agree and understand chef or puppet.</dd>
70
+    
71
+            <dt>Q: Why not use Crowbar?</dt>
72
+            <dd>A: DevStack is optimized for documentation &amp; developers.  As some of us use <a href="https://github.com/dellcloudedge/crowbar">Crowbar</a> for production deployments, we hope developers documenting how they setup systems for new features supports projects like Crowbar.</dd>
73
+    
74
+            <dt>Q: I'd like to help!</dt>
75
+            <dd>A: That isn't a question, but please do!  The source for DevStack is <a href="http://github.com/openstack-dev/devstack">github</a> and bug reports go to <a href="http://bugs.launchpad.net/devstack/">LaunchPad</a>.  Contributions follow the usual process as described in the <a href="http://wiki.openstack.org/HowToContribute">OpenStack wiki</a> even though DevStack is not an official OpenStack project.  This site is housed in the CloudBuilder's <a href="http://github.com/cloudbuilders/devstack">github</a> in the gh-pages branch.</dd>
76
+    
77
+            <dt>Q: Why not use packages?</dt>
78
+            <dd>A: Unlike packages, DevStack leaves your cloud ready to develop - checkouts of the code and services running in screen. However, many people are doing the hard work of packaging and recipes for production deployments.  We hope this script serves as a way to communicate configuration changes between developers and packagers.</dd>
79
+    
80
+            <dt>Q: Why isn't $MY_FAVORITE_DISTRO supported?</dt>
81
+            <dd>A: DevStack is meant for developers and those who want to see how OpenStack really works.  DevStack is known to run on the distro/release combinations listed in <code>README.md</code>.  DevStack is only supported on releases other than those documented in <code>README.md</code> on a best-effort basis.</dd>
82
+
83
+            <dt>Q: What about Fedora/RHEL/CentOS?</dt>
84
+            <dd>A: Fedora and CentOS/RHEL are supported via rpm dependency files and specific checks in <code>stack.sh</code>.  Support will follow the pattern set with the Ubuntu testing, i.e. only a single release of the distro will receive regular testing, others will be handled on a best-effort basis.</dd>
85
+
86
+            <dt>Q: Are there any differences between Ubuntu and Fedora support?</dt>
87
+            <dd>A: LXC support is not complete on Fedora; Neutron is not fully supported prior to Fedora 18 due lack of OpenVSwitch packages.</dd>
88
+
89
+            <dt>Q: How about RHEL 6?</dt>
90
+            <dd>A: RHEL 6 has Python 2.6 and many old modules packaged and is a challenge to support.  There are a number of specific RHEL6 work-arounds in <code>stack.sh</code> to handle this.  But the testing on py26 is valuable so we do it...</dd>
91
+          </dl>
92
+
93
+          <h3><a name="ops_conf">Operation and Configuration</a></h3>
94
+
95
+          <dl class='pull-left'>
96
+            <dt>Q: Can DevStack handle a multi-node installation?</dt>
97
+            <dd>A: Indirectly, yes.  You run DevStack on each node with the appropriate configuration in <code>local.conf</code>.  The primary considerations are turning off the services not required on the secondary nodes, making sure the passwords match and setting the various API URLs to the right place.</dd>
98
+    
99
+            <dt>Q: How can I document the environment that DevStack is using?</dt>
100
+            <dd>A: DevStack includes a script (<code>tools/info.sh</code>) that gathers the versions of the relevant installed apt packages, pip packages and git repos.  This is a good way to verify what Python modules are installed.</dd>
101
+
102
+            <dt>Q: How do I turn off a service that is enabled by default?</dt>
103
+            <dd>A: Services can be turned off by adding <code>disable_service xxx</code> to <code>local.conf</code> (using <code>n-vol</code> in this example):
104
+              <pre>disable_service n-vol</pre>
105
+            </dd>
106
+
107
+            <dt>Q: Is enabling a service that defaults to off done with the reverse of the above?</dt>
108
+            <dd>A: Of course!
109
+              <pre>enable_service qpid</pre>
110
+            </dd>
111
+
112
+            <dt>Q: How do I run a specific OpenStack milestone?</dt>
113
+            <dd>A: OpenStack milestones have tags set in the git repo.  Set the appropriate tag in the <code>*_BRANCH</code> variables in <code>local.conf</code>.  Swift is on its own release schedule so pick a tag in the Swift repo that is just before the milestone release.  For example:
114
+              <pre>[[local|localrc]]
115
+GLANCE_BRANCH=stable/grizzly
116
+HORIZON_BRANCH=stable/grizzly
117
+KEYSTONE_BRANCH=stable/grizzly
118
+NOVA_BRANCH=stable/grizzly
119
+GLANCE_BRANCH=stable/grizzly
120
+NEUTRON_BRANCH=stable/grizzly
121
+SWIFT_BRANCH=1.10.0</pre>
122
+            </dd>
123
+<!---  this is incomplete, remove it until populating the sql catalog is complete
124
+            <dt>Q: How do I use the SQL catalog backend in Keystone?</dt>
125
+            <dd>A: Comment out the template backend lines in the <code>[catalog]</code> section of <code>keystone/etc/keystone.conf</code> and add the SQL backend config like this:
126
+              <pre>[catalog]
127
+#driver = keystone.catalog.backends.templated.TemplatedCatalog
128
+#template_file = ./etc/default_catalog.templates
129
+driver = keystone.catalog.backends.sql.Catalog</pre>
130
+            </dd>
131
+-->
132
+            <dt>Q: Why not use <strike><code>tools/pip-requires</code></strike><code>requirements.txt</code> to grab project dependencies?</dt>
133
+            <dd><strike>The majority of deployments will use packages to install OpenStack that will have distro-based packages as dependencies.  DevStack installs as many of these Python packages as possible to mimic the expected production environemnt.</strike> Certain Linux distributions have a 'lack of workaround' in their Python configurations that installs vendor packaged Python modules and pip-installed modules to the SAME DIRECTORY TREE.  This is causing heartache and moving us in the direction of installing more modules from PyPI than vendor packages.  However, that is only being done as necessary as the packaging needs to catch up to the development cycle anyway so this is kept to a minimum.</dd>
134
+
135
+            <dt>Q: What can I do about RabbitMQ not wanting to start on my fresh new VM?</dt>
136
+            <dd>A: This is often caused by <code>erlang</code> not being happy with the hostname resolving to a reachable IP address.  Make sure your hostname resolves to a working IP address; setting it to 127.0.0.1 in <code>/etc/hosts</code> is often good enough for a single-node installation.  And in an extreme case, use <code>clean.sh</code> to eradicate it and try again.</dd>
137
+
138
+            <dt>Q: How can I set up Heat in stand-alone configuration?</dt>
139
+            <dd>A: Configure <code>local.conf</code> thusly:
140
+              <pre>[[local|localrc]]
141
+HEAT_STANDALONE=True
142
+ENABLED_SERVICES=rabbit,mysql,heat,h-api,h-api-cfn,h-api-cw,h-eng
143
+KEYSTONE_SERVICE_HOST=&lt;keystone-host&gt;
144
+KEYSTONE_AUTH_HOST=&lt;keystone-host&gt;</pre>
145
+            </dd>
146
+
147
+            <dt>Q: Why are my configuration changes ignored?</dt>
148
+            <dd>A: You may have run into the package prerequisite installation timeout.  <code>tools/install_prereqs.sh</code> has a timer that skips the package installation checks if it was run within the last <code>PREREQ_RERUN_HOURS</code> hours (default is 2).  To override this, set <code>FORCE_PREREQ=1</code> and the package checks will never be skipped.
149
+            </dd>
150
+          </dl>
151
+
152
+          <h3><a name="misc">Miscellaneous</a></h3>
153
+
154
+          <dl class='pull-left'>
155
+            <dt>Q: <code>tools/fixup_stuff.sh</code> is broken and shouldn't 'fix' just one version of packages.</dt>
156
+            <dd>A: [Another not-a-question]  No it isn't.  Stuff in there is to correct problems in an environment that need to be fixed elsewhere or may/will be fixed in a future release.  In the case of <code>httplib2</code> and <code>prettytable</code> specific problems with specific versions are being worked around.  If later releases have those problems than we'll add them to the script.  Knowing about the broken future releases is valuable rather than polling to see if it has been fixed.</dd>
157
+          </dl>
158
+        </div>
159
+
160
+      </section>
161
+
162
+      <footer>
163
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
164
+      </footer>
165
+
166
+    </div> <!-- /container -->
167
+  </body>
168
+</html>
0 169
new file mode 100644
... ...
@@ -0,0 +1,330 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>Multi-Node Lab Server Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section id="overview">
46
+        <h1>Multi-Node Lab: Serious Stuff</h1>
47
+        <p>Here is OpenStack in a realistic test configuration with multiple physical servers.</p>
48
+      </section>
49
+
50
+      <section id="prerequisites">
51
+        <div class="page-header">
52
+          <h2>Prerequisites <small>Linux & Network</small></h2>
53
+        </div>
54
+        
55
+        <h3>Minimal Install</h3>
56
+        <p>You need to have a fresh install of Linux on all of your nodes.  You can download the <a href="https://help.ubuntu.com/community/Installation/MinimalCD">Minimal CD</a> for Ubuntu 12.04 (only 27MB) since DevStack will download &amp; install all the additional dependencies.  The netinstall ISO is available for <a href="http://mirrors.kernel.org/fedora/releases/20/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso">Fedora</a> and <a href="http://mirrors.kernel.org/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso">CentOS/RHEL</a>.</p>
57
+
58
+        <p>Install a couple of packages to bootstrap configuration:</p>
59
+        <pre>apt-get install -y git sudo || yum install -y git sudo</pre>
60
+
61
+        <h3>Network Configuration</h3>
62
+        <p>The first iteration of the lab uses OpenStack's FlatDHCP network controller so
63
+        only a single network will be required.  It should be on its own subnet without DHCP;
64
+        the host IPs and floating IP pool(s) will come out of this block. This example 
65
+        uses the following:</p>
66
+        <ul>
67
+          <li>Gateway: 192.168.42.1</li>
68
+          <li>Physical nodes: 192.168.42.11-192.168.42.99</li>
69
+          <li>Floating IPs: 192.168.42.128-192.168.42.254</li>
70
+        </ul>
71
+        <p>Configure each node with a static IP.
72
+        For Ubuntu edit <code>/etc/network/interfaces</code>:</p>
73
+
74
+        <pre>auto eth0
75
+iface eth0 inet static
76
+    address 192.168.42.11
77
+    netmask 255.255.255.0
78
+    gateway 192.168.42.1
79
+</pre>
80
+        <p>For Fedora and CentOS/RHEL edit
81
+        <code>/etc/sysconfig/network-scripts/ifcfg-eth0</code>:</p>
82
+
83
+        <pre>BOOTPROTO=static
84
+IPADDR=192.168.42.11
85
+NETMASK=255.255.255.0
86
+GATEWAY=192.168.42.1
87
+</pre>
88
+
89
+<!-- save these for the VLAN version
90
+   auto eth0.926
91
+   iface eth0.926 inet static
92
+           address 10.4.144.3
93
+           netmask 255.255.240.0
94
+           #gateway 10.4.144.1
95
+           up ifconfig eth0.926
96
+   
97
+   auto eth0.605
98
+   iface eth0.605 inet static
99
+           address 172.16.103.3
100
+           netmask 255.255.255.0
101
+           #gateway 172.16.103.1
102
+           up ifconfig eth0.605 up
103
+-->
104
+
105
+      </section>
106
+
107
+      <section id="installation">
108
+        <div class="page-header">
109
+          <h2>Installation <small>shake and bake</small></h2>
110
+        </div>
111
+
112
+        <h3>Add the DevStack User</h3>
113
+        <p>OpenStack runs as a non-root user that has sudo access to root.  There is nothing special
114
+        about the name, we'll use <code>stack</code> here. Every node must use the same name and
115
+        preferably uid. If you created a user during the OS install you can use it and give it
116
+        sudo priviledges below.  Otherwise create the stack user:</p>
117
+        <pre>groupadd stack
118
+useradd -g stack -s /bin/bash -d /opt/stack -m stack</pre>
119
+        <p>This user will be making many changes to your system during installation and operation
120
+        so it needs to have sudo priviledges to root without a password:</p>
121
+        <pre>echo "stack ALL=(ALL) NOPASSWD: ALL" &gt;&gt; /etc/sudoers</pre>
122
+        <p>From here on use the <code>stack</code> user.  <b>Logout</b> and <b>login</b> as the 
123
+        <code>stack</code> user.</p>
124
+
125
+        <h3>Set Up Ssh</h3>
126
+        <p>Set up the stack user on each node with an ssh key for access:</p>
127
+        <pre>mkdir ~/.ssh; chmod 700 ~/.ssh
128
+echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys</pre>
129
+
130
+        <h3>Download DevStack</h3>
131
+        <p>Grab the latest version of DevStack from github:</p>
132
+        <pre>git clone https://github.com/openstack-dev/devstack.git
133
+cd devstack</pre>
134
+
135
+        <p>Up to this point all of the steps apply to each node in the cluster.  From here on
136
+        there are some differences between the cluster controller (aka 'head node') and the
137
+        compute nodes.</p>
138
+
139
+        <h3>Configure Cluster Controller</h3>
140
+        <p>The cluster controller runs all OpenStack services.  Configure the cluster controller's DevStack in <code>local.conf</code>:</p>
141
+        <pre>[[local|localrc]]
142
+HOST_IP=192.168.42.11
143
+FLAT_INTERFACE=eth0
144
+FIXED_RANGE=10.4.128.0/20
145
+FIXED_NETWORK_SIZE=4096
146
+FLOATING_RANGE=192.168.42.128/25
147
+MULTI_HOST=1
148
+LOGFILE=/opt/stack/logs/stack.sh.log
149
+ADMIN_PASSWORD=labstack
150
+MYSQL_PASSWORD=supersecret
151
+RABBIT_PASSWORD=supersecrete
152
+SERVICE_PASSWORD=supersecrete
153
+SERVICE_TOKEN=xyzpdqlazydog</pre>
154
+<!-- save for vlan
155
+FLAT_INTERFACE=eth0.926
156
+-->
157
+
158
+        <p>In the multi-node configuration the first 10 or so IPs in the private subnet are usually reserved.  Add this to <code>local.sh</code> to have it run after every <code>stack.sh</code> run:</p>
159
+        <pre>for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done</pre>
160
+
161
+        <p>Fire up OpenStack:</p>
162
+        <pre>./stack.sh</pre>
163
+        <p>A stream of activity ensues.  When complete you will see a summary of
164
+        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
165
+        shiny new OpenStack.  The most recent log file is available in <code>stack.sh.log</code>.</p>
166
+
167
+        <h3>Configure Compute Nodes</h3>
168
+        <p>The compute nodes only run the OpenStack worker services.  For additional machines, create a <code>local.conf</code> with:</p>
169
+        <pre>HOST_IP=192.168.42.12 # change this per compute node
170
+FLAT_INTERFACE=eth0
171
+FIXED_RANGE=10.4.128.0/20
172
+FIXED_NETWORK_SIZE=4096
173
+FLOATING_RANGE=192.168.42.128/25
174
+MULTI_HOST=1
175
+LOGFILE=/opt/stack/logs/stack.sh.log
176
+ADMIN_PASSWORD=labstack
177
+MYSQL_PASSWORD=supersecret
178
+RABBIT_PASSWORD=supersecrete
179
+SERVICE_PASSWORD=supersecrete
180
+SERVICE_TOKEN=xyzpdqlazydog
181
+DATABASE_TYPE=mysql
182
+SERVICE_HOST=192.168.42.11
183
+MYSQL_HOST=192.168.42.11
184
+RABBIT_HOST=192.168.42.11
185
+GLANCE_HOSTPORT=192.168.42.11:9292
186
+ENABLED_SERVICES=n-cpu,n-net,n-api,c-sch,c-api,c-vol</pre>
187
+<!-- save for vlan
188
+FLAT_INTERFACE=eth0.926
189
+-->
190
+
191
+        <p>Fire up OpenStack:</p>
192
+        <pre>./stack.sh</pre>
193
+        <p>A stream of activity ensues.  When complete you will see a summary of
194
+        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
195
+        shiny new OpenStack.  The most recent log file is available in <code>stack.sh.log</code>.</p>
196
+
197
+        <h3>Cleaning Up After DevStack</h3>
198
+        <p>Shutting down OpenStack is now as simple as running the included <code>unstack.sh</code> script:</p>
199
+        <pre>./unstack.sh</pre>
200
+
201
+        <p>A more aggressive cleanup can be performed using <code>clean.sh</code>.  It removes certain troublesome packages and attempts to leave the system in a state where changing the database or queue manager can be reliably performed.
202
+        <pre>./clean.sh</pre>
203
+
204
+        <p>Sometimes running instances are not cleaned up.  DevStack attempts to do this when it
205
+        runs but there are times it needs to still be done by hand:</p>
206
+        <pre>sudo rm -rf /etc/libvirt/qemu/inst*
207
+sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy</pre>
208
+
209
+      </section>
210
+
211
+      <section id="options">
212
+        <div class="page-header">
213
+          <h2>Options <small>pimp your stack</small></h2>
214
+        </div>
215
+
216
+        <h3>Additional Users</h3>
217
+        <p>DevStack creates two OpenStack users (<code>admin</code> and <code>demo</code>) and two tenants (also <code>admin</code> and <code>demo</code>).  <code>admin</code> is exactly what it sounds like, a priveleged administrative account that is a member of both the <code>admin</code> and <code>demo</code> tenants.  <code>demo</code> is a normal user account that is only a member of the <code>demo</code> tenant.  Creating additional OpenStack users can be done through the dashboard, sometimes it is easier to do them in bulk from a script, especially since they get blown away every time
218
+        <code>stack.sh</code> runs.  The following steps are ripe for scripting:</p>
219
+        <pre># Get admin creds
220
+. openrc admin admin
221
+        
222
+# List existing tenants
223
+keystone tenant-list
224
+
225
+# List existing users
226
+keystone user-list
227
+
228
+# Add a user and tenant
229
+NAME=bob
230
+PASSWORD=BigSecrete
231
+TENANT=$NAME
232
+keystone tenant-create --name=$NAME
233
+keystone user-create --name=$NAME --pass=$PASSWORD
234
+keystone user-role-add --user-id=&lt;bob-user-id&gt; --tenant-id=&lt;bob-tenant-id&gt; --role-id=&lt;member-role-id&gt;
235
+# member-role-id comes from the existing member role created by stack.sh
236
+# keystone role-list</pre>
237
+
238
+        <h3>Swift</h3>
239
+        <p>Swift requires a significant amount of resources and is disabled by default in DevStack.
240
+        The support in DevStack is geared toward a minimal installation but can be used for
241
+        testing.  To implement a true multi-node test of Swift required more than DevStack provides.  
242
+        Enabling it is as simple as enabling the <code>swift</code> service in <code>local.conf</code>:
243
+        <pre>enable_service swift</pre>
244
+
245
+        <p>Swift will put its data files in <code>SWIFT_DATA_DIR</code> (default <code>/opt/stack/data/swift</code>).
246
+        The size of the data 'partition' created (really a loop-mounted file) is set by
247
+        <code>SWIFT_LOOPBACK_DISK_SIZE</code>.  The Swift config files are located in 
248
+        <code>SWIFT_CONFIG_DIR</code> (default <code>/etc/swift</code>).  All of these settings can be overridden in
249
+        (wait for it...) <code>local.conf</code>.</p>
250
+
251
+        <h3>Volumes</h3>
252
+        <p>DevStack will automatically use an existing LVM volume group named <code>stack-volumes</code> 
253
+        to store cloud-created volumes. If <code>stack-volumes</code> doesn't exist, DevStack 
254
+        will set up a 5Gb loop-mounted file to contain it.  This obviously limits the
255
+        number and size of volumes that can be created inside OpenStack.  The size can be
256
+        overridden by setting <code>VOLUME_BACKING_FILE_SIZE</code> in <code>local.conf</code>.</p>
257
+
258
+        <p><code>stack-volumes</code> can be pre-created on any physical volume supported by
259
+        Linux's LVM.  The name of the volume group can be changed by setting <code>VOLUME_GROUP</code>
260
+        in <code>localrc</code>. <code>stack.sh</code> deletes
261
+        all logical volumes in <code>VOLUME_GROUP</code> that begin with 
262
+        <code>VOLUME_NAME_PREFIX</code> as part of cleaning up from previous runs.
263
+        It is recommended to not use the root volume group as <code>VOLUME_GROUP</code>.</p>
264
+
265
+        <p>The details of creating the volume group depends on the server hardware involved 
266
+        but looks something like this:</p>
267
+        <pre>pvcreate /dev/sdc
268
+vgcreate stack-volumes /dev/sdc</pre>
269
+
270
+        <h3>Syslog</h3>
271
+        <p>DevStack is capable of using <code>rsyslog</code> to agregate logging across the cluster.
272
+        It is off by default; to turn it on set <code>SYSLOG=True</code> in <code>local.conf</code>.
273
+        <code>SYSLOG_HOST</code> defaults to <code>HOST_IP</code>; on the compute nodes it 
274
+        must be set to the IP of the cluster controller to send syslog output there.  In the example
275
+        above, add this to the compute node <code>local.conf</code>:</p>
276
+        <pre>SYSLOG_HOST=192.168.42.11</pre>
277
+
278
+        <h3>Using Alternate Repositories/Branches</h3>
279
+        <p>The git repositories for all of the OpenStack services are defined in <code>stackrc</code>.
280
+        Since this file is a part of the DevStack package changes to it will probably be overwritten
281
+        as updates are applied.  Every setting in <code>stackrc</code> can be redefined in
282
+        <code>local.conf</code>.</p>
283
+
284
+        <p>To change the repository or branch that a particular OpenStack service is created from,
285
+        simply change the value of <code>*_REPO</code> or <code>*_BRANCH</code> corresponding to
286
+        that service.</p>
287
+
288
+        <p>After making changes to the repository or branch, if <code>RECLONE</code> is not set
289
+        in <code>localrc</code> it may be necessary to remove the corresponding directory from
290
+        <code>/opt/stack</code> to force git to re-clone the repository.</p>
291
+
292
+        <p>For example, to pull Nova from a proposed release candidate in the primary Nova 
293
+        repository:</p>
294
+        <pre>NOVA_BRANCH=rc-proposed</pre>
295
+
296
+        <p>To pull Glance from an experimental fork:</p>
297
+        <pre>GLANCE_BRANCH=try-something-big
298
+GLANCE_REPO=https://github.com/mcuser/glance.git</pre>
299
+
300
+      </section>
301
+
302
+      <section id="Notes">
303
+        <div class="page-header">
304
+          <h2>Notes <small>stuff you might need to know</small></h2>
305
+        </div>
306
+
307
+        <h3>Reset the Bridge</h3>
308
+        <p>How to reset the bridge configuration:</p>
309
+        <pre>sudo brctl delif br100 eth0.926
310
+sudo ip link set dev br100 down
311
+sudo brctl delbr br100</pre>
312
+<!--
313
+   sudo rm /etc/libvirt/qemu/*.xml
314
+-->
315
+
316
+        <h3>Set MySQL Password</h3>
317
+        <p>If you forgot to set the root password you can do this:</p>
318
+        <pre>mysqladmin -u root -pnova password 'supersecret'</pre>
319
+
320
+      </section>
321
+
322
+      <footer>
323
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
324
+      </footer>
325
+
326
+    </div> <!-- /container -->
327
+
328
+  </body>
329
+</html>
0 330
new file mode 100644
... ...
@@ -0,0 +1,147 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>PXE Boot Server Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+      <section id="overview">
45
+        <h1>PXE Boot Server Guide: Magic Dust for Network Boot</h1>
46
+        <p>Boot DevStack from a PXE server to a RAM disk.</p>
47
+      </section>
48
+
49
+      <section id="requirements">
50
+        <div class="page-header">
51
+          <h2>Prerequisites <small>Hardware & OpenWRT</small></h2>
52
+        </div>
53
+        
54
+        <h3>Hardware</h3>
55
+        <p>The whole point of this exercise is to have a highly portable boot server, so using a small router with a USB port is the desired platform.  This guide uses a Buffalo WZR-HP-G300NH as an example, but it is easily generalized for other supported platforms. See openwrt.org for more.</p>
56
+        
57
+        <h3>OpenWRT</h3>
58
+        <p>Any recent 'Backfire' build of OpenWRT will work for the boot server project.  We build from trunk and have made the images available at <a href="http://openwrt.xr7.org/openwrt">http://openwrt.xr7.org/openwrt</a>.</p>
59
+      </section>
60
+
61
+      <section id="installation">
62
+        <div class="page-header">
63
+          <h2>Installation <small>bit blasting</small></h2>
64
+        </div>
65
+
66
+        <h3>Install the Image</h3>
67
+        <p>This process follows <a href="http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h">the OpenWRT doc OEM Install</a> to tftp the new image onto the router.  You need a computer to set up the router, we assume it is a recent Linux or OS/X installation.</p>
68
+        <ul>
69
+          <li>Get openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin
70
+            <pre>wget http://openwrt.xr7.org/openwrt/ar71xx/openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin</pre>
71
+          </li>
72
+          <li>Connect computer to LAN port 4 (closest to WAN port)</li>
73
+          <li>Set computer interface to IP address in the 192.168.11.2</li>
74
+          <li>Add static arp entry for router
75
+            <pre>arp -s 192.168.11.1 &lt;mac-address&gt;</pre>
76
+          </li>
77
+          <li>Start TFTP transfer attempt
78
+            <pre>tftp 192.168.11.1
79
+binary
80
+rexmt 1
81
+timeout 60
82
+put openwrt-ar71xx-wzr-hp-g300nh-squashfs-tftp.bin</pre>
83
+          </li>
84
+          <li>Power on router. Router will reboot and initialize on 192.168.1.1.</li>
85
+          <li>Delete static arp entry for router
86
+            <pre>arp -d 192.168.11.1</pre>
87
+          </li>
88
+          <li>Set computer to DHCP, connect and telnet to router and set root password.</li>
89
+        </ul>
90
+
91
+        <h3>Configure the Router</h3>
92
+        <ul>
93
+          <li>Update <code>/etc/opkg.conf</code> to point to our repo:
94
+            <pre>src/gz packages http://192.168.5.13/openwrt/build/ar71xx/packages</pre>
95
+          </li>
96
+          <li>Configure anon mounts:
97
+            <pre>uci delete fstab.@mount[0]
98
+uci commit fstab
99
+/etc/init.d/fstab restart</pre>
100
+          </li>
101
+          <li>Reset the DHCP address range.  DevStack will claim the upper 
102
+            /25 of the router's LAN address space for floating IPs so the
103
+            default DHCP address range needs to be moved:
104
+            <pre>uci set dhcp.lan.start=65
105
+uci set dhcp.lan.limit=60
106
+uci commit dhcp</pre>
107
+          </li>
108
+          <li>Enable TFTP:
109
+            <pre>uci set dhcp.@dnsmasq[0].enable_tftp=1
110
+uci set dhcp.@dnsmasq[0].tftp_root=/mnt/sda1/tftpboot
111
+uci set dhcp.@dnsmasq[0].dhcp_boot=pxelinux.0
112
+uci commit dhcp
113
+/etc/init.d/dnsmasq restart</pre>
114
+          </li>
115
+        </ul>
116
+
117
+        <h3>Set Up tftpboot</h3>
118
+        <ul>
119
+          <li>Create the <code>/tmp/tftpboot</code> structure and populate it:
120
+            <pre>cd ~/devstack
121
+tools/build_pxe_boot.sh /tmp</pre>
122
+            This calls <code>tools/build_ramdisk.sh</code> to create a 2GB ramdisk 
123
+            containing a complete development Oneiric OS plus the 
124
+            OpenStack code checkouts.
125
+          </li>
126
+          <li>Copy <code>tftpboot</code> to a USB drive:
127
+            <pre>mount /dev/sdb1 /mnt/tmp
128
+rsync -a /tmp/tftpboot/ /mnt/tmp/tftpboot/
129
+umount /mnt/tmp</pre>
130
+          </li>
131
+          <li>Plug USB drive into router.  It will be automounted and is ready to serve content.</li>
132
+        </ul>
133
+
134
+        <p>Now <a href="ramdisk.html">return</a> to the RAM disk Guide to kick
135
+           off your DevStack experience.</p>
136
+
137
+      </section>
138
+
139
+      <footer>
140
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
141
+      </footer>
142
+
143
+    </div> <!-- /container -->
144
+
145
+  </body>
146
+</html>
0 147
new file mode 100644
... ...
@@ -0,0 +1,119 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>RAMdisk Boot Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+      <section id="overview">
45
+        <h1>Stack-in-a-Box: Try before you mkfs</h1>
46
+        <p>Run DevStack from a RAM disk to give it a whirl before making the 
47
+           commitment to install it.  We'll cover booting from a USB drive or 
48
+           over the network via PXE.  We'll even thow in configuring a home
49
+           router to handle the PXE boot.  You will need a minimum of 3GB 
50
+           for both of these configurations as the RAM disk itself is 2GB.</p>
51
+      </section>
52
+
53
+      <section id="requirements">
54
+        <div class="page-header">
55
+          <h2>Prerequisites <small>Hardware</small></h2>
56
+        </div>
57
+        
58
+        <h3>USB Boot</h3>
59
+        <p><a href="usb-boot.html">This guide</a> covers the creation of a bootable USB drive.  Your 
60
+        computer BIOS must support booting from USB.</p>
61
+        
62
+        <h3>PXE Boot</h3>
63
+        <p><a href="pxe-boot.html">This guide</a> covers the installation of OpenWRT on a home router
64
+        and configuring it as a PXE server, plus the creation of the
65
+        boot images and PXE support files.
66
+      </section>
67
+
68
+      <section id="installation">
69
+        <div class="page-header">
70
+          <h2>Installation <small>bit blasting</small></h2>
71
+        </div>
72
+
73
+        <h3>Install DevStack</h3>
74
+        <p>Grab the latest version of DevStack via https:</p>
75
+		<pre>sudo apt-get install git -y
76
+git clone https://github.com/openstack-dev/devstack.git
77
+cd devstack</pre>
78
+
79
+        <h3>Prepare the Boot RAMdisk</h3>
80
+        <p>Pick your boot method and follow the guide to prepare to build
81
+           the RAM disk and set up the boot process:</p>
82
+        <ul>
83
+          <li><a href="usb-boot.html">USB boot</a></li>
84
+          <li><a href="pxe-boot.html">PXE boot</a></li>
85
+        </ul>
86
+
87
+        <h3>Fire It Up</h3>
88
+        <ul>
89
+          <li>Boot the computer into the RAM disk.  The details will vary from
90
+              machine to machine but most BIOSes have a method to select the
91
+              boot device, often by pressing F12 during POST.</li>
92
+          <li>Select 'DevStack' from the Boot Menu.</li>
93
+          <li>Log in with the 'stack' user and 'pass' password.</li>
94
+          <li>Create <code>devstack/localrc</code> if you wish to change any 
95
+              of the configuration variables.  You will probably want to at 
96
+              least set the admin login password to something memorable rather 
97
+              than the default 20 random characters:
98
+            <pre>ADMIN_PASSWORD=openstack</pre>
99
+          </li>
100
+          <li>Fire up OpenStack!
101
+            <pre>./run.sh</pre>
102
+          </li>
103
+          <li>See the processes running in screen:
104
+            <pre>screen -x</pre>
105
+          </li>
106
+          <li>Connect to the dashboard at <code>http://&lt;ip-address&gt;/</code></li>
107
+        </ul>
108
+
109
+      </section>
110
+
111
+      <footer>
112
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
113
+      </footer>
114
+
115
+    </div> <!-- /container -->
116
+
117
+  </body>
118
+</html>
0 119
new file mode 100644
... ...
@@ -0,0 +1,131 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>Single Machine Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+      <section id="overview">
45
+        <h1>All-In-One: Dedicated Hardware</h1>
46
+        <p>Things are about to get real!  Using OpenStack in containers or VMs is nice for kicking the tires, but doesn't compare to the feeling you get with hardware.</p>
47
+      </section>
48
+
49
+      <section id="prerequisites">
50
+        <div class="page-header">
51
+          <h2>Prerequisites <small>Linux & Network</small></h2>
52
+        </div>
53
+        
54
+        <h3>Minimal Install</h3>
55
+        <p>You need to have a system with a fresh install of Linux.  You can download the <a href="https://help.ubuntu.com/community/Installation/MinimalCD">Minimal CD</a> for Ubuntu 12.04 (only 27MB) since DevStack will download &amp; install all the additional dependencies.  The netinstall ISO is available for <a href="http://mirrors.kernel.org/fedora/releases/18/Fedora/x86_64/iso/Fedora-18-x86_64-netinst.iso">Fedora</a> and <a href="http://mirrors.kernel.org/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-netinstall.iso">CentOS/RHEL</a>.  You may be tempted to use a desktop distro on a laptop, it will probably work but you may need to tell Network Manager to keep its fingers off the interface(s) that OpenStack uses for bridging.</p>
56
+        
57
+        <h3>Network Configuration</h3>
58
+        <p>Determine the network configuration on the interface used to integrate your 
59
+        OpenStack cloud with your existing network. For example, if the IPs given out on your network 
60
+        by DHCP are 192.168.1.X - where X is between 100 and 200 you will be able to use IPs 
61
+        201-254 for <b>floating ips</b>.</p>
62
+        <p>To make things easier later change your host to use a static IP instead of DHCP (i.e. 192.168.1.201).</p>
63
+      </section>
64
+
65
+      <section id="installation">
66
+        <div class="page-header">
67
+          <h2>Installation <small>shake and bake</small></h2>
68
+        </div>
69
+
70
+        <h3>Add your user</h3>
71
+        <p>We need to add a user to install DevStack.  (if you created a user during install you can skip this step and just give the user sudo priviledges below)</p>
72
+        <pre>adduser stack</pre>
73
+        <p>Since this user will be making many changes to your system, it will need to have sudo priviledges:</p>
74
+        <pre>apt-get install sudo -y || yum install -y sudo
75
+echo "stack ALL=(ALL) NOPASSWD: ALL" &gt;&gt; /etc/sudoers</pre>
76
+        <p>From here on you should use the user you created.  <b>Logout</b> and <b>login</b> as that user.</p>
77
+
78
+        <h3>Download DevStack</h3>
79
+        <p>We'll grab the latest version of DevStack via https:</p>
80
+        <pre>sudo apt-get install git -y || yum install -y git
81
+git clone https://github.com/openstack-dev/devstack.git
82
+cd devstack</pre>
83
+
84
+        <h3>Run DevStack</h3>
85
+        <p>Now to configure <code>stack.sh</code>.  DevStack includes a sample in <code>devstack/samples/local.conf</code>.  Create <code>local.conf</code> as shown below to do the following:</p>
86
+        <ul>
87
+          <li>Set <code>FLOATING_RANGE</code> to a range not used on the local network, i.e. 192.168.1.224/27.  This configures IP addresses ending in 225-254 to be used as floating IPs.</li>
88
+          <li>Set <code>FIXED_RANGE</code> and <code>FIXED_NETWORK_SIZE</code> to configure the internal address space used by the instances.</li>
89
+          <li>Set <code>FLAT_INTERFACE</code> to the Ethernet interface that connects the host to your local network.  This is the interface that should be configured with the static IP address mentioned above.</li>
90
+          <li>Set the administrative password.  This password is used for the <b>admin</b> and <b>demo</b> accounts set up as OpenStack users.</li>
91
+          <li>Set the MySQL administrative password.  The default here is a random hex string which is inconvenient if you need to look at the database directly for anything.</li>
92
+          <li>Set the RabbitMQ password.</li>
93
+          <li>Set the service password.  This is used by the OpenStack services (Nova, Glance, etc) to authenticate with Keystone.</li>
94
+        </ul>
95
+        <p><code>local.conf</code> should look something like this:</p>
96
+        <pre>[[local|localrc]]
97
+FLOATING_RANGE=192.168.1.224/27
98
+FIXED_RANGE=10.11.12.0/24
99
+FIXED_NETWORK_SIZE=256
100
+FLAT_INTERFACE=eth0
101
+ADMIN_PASSWORD=supersecret
102
+MYSQL_PASSWORD=iheartdatabases
103
+RABBIT_PASSWORD=flopsymopsy
104
+SERVICE_PASSWORD=iheartksl</pre>
105
+
106
+        <p>Run DevStack:</p>
107
+        <pre>./stack.sh</pre>
108
+        <p>A seemingly endless stream of activity ensues.  When complete you will see a summary of
109
+        <code>stack.sh</code>'s work, including the relevant URLs, accounts and passwords to poke at your
110
+        shiny new OpenStack.</p>
111
+
112
+        <h3>Using OpenStack</h3>
113
+        <p>At this point you should be able to access the dashboard from other computers on the 
114
+        local network.  In this example that would be http://192.168.1.201/ for the dashboard (aka Horizon).
115
+        Launch VMs and if you give them floating IPs and security group access those VMs will be accessable from other machines on your network.</p>
116
+
117
+        <p>Some examples of using the OpenStack command-line clients <code>nova</code> and <code>glance</code>
118
+        are in the shakedown scripts in <code>devstack/exercises</code>.  <code>exercise.sh</code>
119
+        will run all of those scripts and report on the results.</p>
120
+
121
+      </section>
122
+
123
+      <footer>
124
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
125
+      </footer>
126
+
127
+    </div> <!-- /container -->
128
+
129
+  </body>
130
+</html>
0 131
new file mode 100644
... ...
@@ -0,0 +1,137 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>Single Machine Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+      <section id="overview">
45
+        <h1>Running a Cloud in a VM</h1>
46
+        <p>Use the cloud to build the cloud! Use your cloud to launch new versions of OpenStack 
47
+        in about 5 minutes.  When you break it, start over!  The VMs launched in the cloud will 
48
+        be slow as they are running in QEMU (emulation), but their primary use is testing
49
+        OpenStack development and operation.  Speed not required.</p>
50
+      </section>
51
+
52
+      <section id="prerequisites">
53
+        <div class="page-header">
54
+          <h2>Prerequisites <small>Cloud & Image</small></h2>
55
+        </div>
56
+
57
+        <h3>Virtual Machine</h3>
58
+        <p>DevStack should run in any virtual machine running a supported Linux release.  It will perform best with 2Gb or more of RAM.</p>
59
+
60
+        <h3>OpenStack Deployment &amp; cloud-init</h3>
61
+        <p>If the cloud service has an image with <code>cloud-init</code> pre-installed, use it.  You can
62
+        get one from <a href="http://uec-images.ubuntu.com">Ubuntu's Daily Build</a>
63
+        site if necessary.  This will enable you to launch VMs with userdata that installs 
64
+        everything at boot time.  The userdata script below will install and run
65
+        DevStack with a minimal configuration.  The use of <code>cloud-init</code>
66
+        is outside the scope of this document, refer to <a href"http://cloudinit.readthedocs.org/en/latest/index.html">the
67
+        <code>cloud-init</code> docs</a> for more information.</p>
68
+
69
+        <p>If you are directly using a hypervisor like Xen, kvm or VirtualBox you can manually kick off
70
+        the script below as a non-root user in a bare-bones server installation.</p>
71
+      </section>
72
+
73
+      <section id="requirements">
74
+        <div class="page-header">
75
+          <h2>Installation <small>shake and bake</small></h2>
76
+        </div>
77
+
78
+        <h3>Launching With Cloud-Init</h3>
79
+        <p>This cloud config grabs the latest version of DevStack via git, creates a minimal 
80
+        <code>local.conf</code> file and kicks off <code>stack.sh</code>.  It should
81
+        be passed as the user-data file when booting the VM.</p>
82
+        <pre>#cloud-config
83
+
84
+users:
85
+  - default
86
+  - name: stack
87
+    lock_passwd: False
88
+    sudo: ["ALL=(ALL) NOPASSWD:ALL\nDefaults:stack !requiretty"]
89
+    shell: /bin/bash
90
+
91
+write_files:
92
+  - content: |
93
+        #!/bin/sh
94
+        DEBIAN_FRONTEND=noninteractive sudo apt-get -qqy update || sudo yum update -qy
95
+        DEBIAN_FRONTEND=noninteractive sudo apt-get install -qqy git || sudo yum install -qy git
96
+        sudo chown stack:stack /home/stack
97
+        cd /home/stack
98
+        git clone https://github.com/openstack-dev/devstack.git
99
+        cd devstack
100
+        echo '[[local|localrc]]' > local.conf
101
+        echo ADMIN_PASSWORD=password >> local.conf
102
+        echo MYSQL_PASSWORD=password >> local.conf
103
+        echo RABBIT_PASSWORD=password >> local.conf
104
+        echo SERVICE_PASSWORD=password >> local.conf
105
+        echo SERVICE_TOKEN=tokentoken >> local.conf
106
+        ./stack.sh
107
+    path: /home/stack/start.sh
108
+    permissions: 0755
109
+
110
+runcmd:
111
+  - su -l stack ./start.sh</pre>
112
+        <p>As DevStack will refuse to run as root, this configures <code>cloud-init</code>
113
+        to create a non-root user and run the <code>start.sh</code> script as that user.</p>
114
+
115
+        <h3>Launching By Hand</h3>
116
+        <p>Using a hypervisor directly, launch the VM and either manually perform the steps in the 
117
+        embedded shell script above or copy it into the VM.</p>
118
+
119
+        <h3>Using OpenStack</h3>
120
+        <p>At this point you should be able to access the dashboard.  Launch VMs and if you give them floating IPs access those VMs from other machines on your network.</p>
121
+
122
+        <p>One interesting use case is for developers working on a VM on their laptop.  Once
123
+        <code>stack.sh</code> has completed once, all of the pre-requisite packages are installed
124
+        in the VM and the source trees checked out.  Setting <code>OFFLINE=True</code> in
125
+        <code>local.conf</code> enables <code>stack.sh</code> to run multiple times without an Internet
126
+        connection.  DevStack, making hacking at the lake possible since 2012!</p>
127
+      </section>
128
+
129
+      <footer>
130
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
131
+      </footer>
132
+
133
+    </div> <!-- /container -->
134
+
135
+  </body>
136
+</html>
0 137
new file mode 100644
... ...
@@ -0,0 +1,99 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>USB Boot Server Guide - DevStack</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="../assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="../assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="../overview.html">Overview</a></li>
34
+            <li><a href="../changes.html">Changes</a></li>
35
+            <li><a href="../faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+      <section id="overview">
45
+        <h1>USB Boot: Undoable Stack Boot</h1>
46
+        <p>Boot DevStack from a USB disk into a RAM disk.</p>
47
+      </section>
48
+
49
+      <section id="requirements">
50
+        <div class="page-header">
51
+          <h2>Prerequisites</h2>
52
+        </div>
53
+        
54
+        <h3>Hardware</h3>
55
+        <p>This guide covers the creation of a bootable USB drive.  Your 
56
+           computer BIOS must support booting from USB and You will want at least 3GB of 
57
+           RAM.  You also will need a USB drive of at least 2GB.</p>
58
+
59
+        <h3>Software</h3>
60
+        <p>Ubuntu 11.10 (Oneiric Ocelot) is required on host to create images.</p>
61
+      </section>
62
+
63
+      <section id="installation">
64
+        <div class="page-header">
65
+          <h2>Installation <small>bit blasting</small></h2>
66
+        </div>
67
+
68
+        <h3>Set Up USB Drive</h3>
69
+        <ul>
70
+          <li>Insert the USB drive into the computer.  Make a note of the device name, such as 
71
+          <code>sdb</code>. Do not mount the device.</li>
72
+          <li>Install the boot system:
73
+            <pre>tools/build_usb_boot.sh /dev/sdb1</pre>
74
+            <p>This calls tools/build_ramdisk.sh to create a 2GB ramdisk 
75
+               containing a complete development Oneiric OS plus the 
76
+               OpenStack code checkouts.  It then writes a syslinux boot sector
77
+               to the specified device and creates <code>/syslinux</code>.</p>
78
+          </li>
79
+          <li>If desired, you may now mount the device:
80
+            <pre>mount /dev/sdb1 /mnt/tmp
81
+# foo
82
+umount /mnt/tmp</pre>
83
+          </li>
84
+        </ul>
85
+
86
+        <p>Now <a href="ramdisk.html">return</a> to the RAM disk Guide to kick
87
+           off your DevStack experience.</p>
88
+
89
+      </section>
90
+
91
+      <footer>
92
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; this is not an official OpenStack project...</p>
93
+      </footer>
94
+
95
+    </div> <!-- /container -->
96
+
97
+  </body>
98
+</html>
0 99
new file mode 100644
... ...
@@ -0,0 +1,529 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Deploying OpenStack for Developers</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+
45
+      <div class="hero-unit">
46
+        <div class="pull-left">
47
+          <h1 id="main_header">DevStack - an OpenStack Community Production</h1>
48
+          <div class="sub_header">
49
+            <p></p>
50
+            <p>A documented shell script to build complete OpenStack development environments. <br /><br />
51
+              An OpenStack program maintained by the developer community.</p>
52
+          </div>
53
+        </div>
54
+        <div class="pull-left">
55
+          <ol id="getting_started">
56
+            <li id="ubuntu">Setup a fresh supported Linux installation.</li>
57
+            <li id="github">
58
+              Clone devstack from devstack.
59
+              <pre>git clone https://github.com/openstack-dev/devstack.git</pre>
60
+            </li>
61
+            <li id="install">
62
+              Deploy your OpenStack Cloud
63
+              <pre>cd devstack &amp;&amp; ./stack.sh</pre>
64
+            </li>
65
+          </ol>
66
+        </div>
67
+        <div class="clear">&nbsp;</div>
68
+      </div>
69
+
70
+
71
+      <section id="quickstart" class="span12">
72
+        <div class="page-header">
73
+          <h2>Quick Start <small>This ain't your first rodeo</small></h2>
74
+        </div>
75
+        <ol>
76
+            <li value="0">
77
+              <h3>Select a Linux Distribution</h3>
78
+              <p>Only Ubuntu 12.04 (Precise), Fedora 20 and CentOS/RHEL 6.5 are documented here.  OpenStack also runs and is packaged on other flavors of Linux such as OpenSUSE and Debian.</p>
79
+            </li>
80
+            <li>
81
+              <h3>Install Selected OS</h3>
82
+              <p>In order to correctly install all the dependencies, we assume a specific minimal version of the supported distributions to make it as easy as possible.  We recommend using a minimal install of Ubuntu or Fedora server in a VM if this is your first time.</p>
83
+            </li>
84
+            <li>
85
+              <h3>Download DevStack</h3>
86
+              <pre>git clone https://github.com/openstack-dev/devstack.git</pre>
87
+              <p>The <code>devstack</code> repo contains a script that installs OpenStack and templates for configuration files</p>
88
+            </li>
89
+            <li>
90
+              <h3>Configure</h3>
91
+              <p>While optional, we recommend a <a href="configuration.html">minimal configuration</a> be set up as you may not want our default values for everything.</p>
92
+            </li>
93
+            <li>
94
+              <h3>Start the install</h3>
95
+              <pre>cd devstack; ./stack.sh</pre>
96
+              <p>It takes a few minutes, we recommend <a href="stack.sh.html">reading the script</a> while it is building.</p>
97
+            </li>
98
+        </ol>
99
+      </section>
100
+
101
+      <section id="guides" class='span12'>
102
+        <div class="page-header">
103
+          <h2>Guides <small>Walk through various setups used by stackers</small></h2>
104
+        </div>
105
+
106
+        <div class='row span8'>
107
+          <h2>OpenStack on VMs</h2>
108
+          <table class='table table-striped table-bordered'>
109
+            <thead>
110
+              <tr>
111
+                <th>Title</th>
112
+                <th>Description</th>
113
+                <th>Link</th>
114
+              </tr>
115
+            </thead>
116
+            <tbody>
117
+              <tr>
118
+                <td>Virtual Machine</td>
119
+                <td>Run OpenStack in a VM.  The VMs launched in your cloud will be slow as they are running in QEMU (emulation), but it is useful if you don't have spare hardware laying around.</td>
120
+                <td><a class="btn btn-small btn-primary table-action" href="guides/single-vm.html">Read &raquo;</a></td>
121
+              </tr>
122
+
123
+<!--
124
+              <tr>
125
+                <td>LXC Containers</td>
126
+                <td>Already running Ubuntu on your machine?  Using containers lets you build even faster.</td>
127
+                <td>Coming soon!</td>
128
+              </tr>
129
+-->
130
+            </tbody>
131
+            <tfoot>
132
+              <td colspan="3">1 Guide</td>
133
+            </tfoot>
134
+          </table>
135
+        </div>
136
+        <div class="wat span3 pull-right">
137
+          <h4>What is this?</h4>
138
+          <p>These guides tell you how to virtualize your OpenStack cloud in virtual machines. This means that you can get started without having to purchase any hardware.</p>
139
+        </div>
140
+
141
+        <div class='row span8'>
142
+          <h2>OpenStack on Hardware</h2>
143
+          <table class='table table-striped table-bordered'>
144
+            <thead>
145
+              <tr>
146
+                <th>Title</th>
147
+                <th>Description</th>
148
+                <th>Link</th>
149
+              </tr>
150
+            </thead>
151
+            <tbody>
152
+              <tr>
153
+                <td>All-In-One</td>
154
+                <td>Run OpenStack on dedicated hardware to get real performance in your VMs.  This can include a server-class machine or a laptop at home.</td>
155
+                <td><a class="btn btn-small btn-primary table-action" href="guides/single-machine.html">Read &raquo;</a></td>
156
+              </tr>
157
+
158
+              <tr>
159
+                <td>Multi-Node + VLANs</td>
160
+                <td>Setup a multi-node cluster with dedicated VLANs for VMs &amp; Management.</td>
161
+                <td><a class="btn btn-small btn-primary table-action" href="guides/multinode-lab.html">Read &raquo;</a></td>
162
+              </tr>
163
+
164
+<!--
165
+              <tr>
166
+                <td>Stack-in-a-Box</td>
167
+                <td>Run OpenStack from a RAM disk to give it a spin without touching your existing OS installation.  Includes PXE and USB boot methods.</td>
168
+                <td><a class="btn btn-small btn-primary table-action" href="guides/ramdisk.html">Read &raquo;</a></td>
169
+              </tr>
170
+-->
171
+            </tbody>
172
+            <tfoot>
173
+              <td colspan="3">2 Guides</td>
174
+            </tfoot>
175
+          </table>
176
+        </div>
177
+        <div class="wat span3 pull-right">
178
+          <h4>What is this?</h4>
179
+          <p>These guides tell you how to deploy a development environment on real hardware. Guides range from running OpenStack on a single laptop to running a multi-node deployment on datacenter hardware.</p>
180
+        </div>
181
+
182
+      </section>
183
+
184
+      <section id="docs" class="span12">
185
+        <div class="page-header">
186
+          <h2>Documentation <small>Help yourself to stack</small></h2>
187
+        </div>
188
+
189
+        <div class='row span5 pull-left'>
190
+          <h2>Overview</h2>
191
+          <p><a href="overview.html">An overview of DevStack goals and priorities</a></p>
192
+          <h2>Configuration</h2>
193
+          <p><a href="configuration.html">Configuring and customizing the stack</a></p>
194
+          <h2>Plugins</h2>
195
+          <p><a href="plugins.html">Extending DevStack with new features</a></p>
196
+        </div>
197
+
198
+        <div class='span5 pull-right'>
199
+          <h2>Recent Changes</h2>
200
+          <p><a href="changes.html">An incomplete summary of recent changes</a></p>
201
+          <h2>FAQ</h2>
202
+          <p><a href="faq.html">The DevStack FAQ</a></p>
203
+          <h2>Contributing</h2>
204
+          <p><a href="contributing.html">Pitching in to make DevStack a better place</a></p>
205
+        </div>
206
+
207
+      </section>
208
+
209
+      <section id="docs" class="span12">
210
+        <div class="page-header">
211
+          <h2>Code <small>A look at the bits that make it all go</small></h2>
212
+        </div>
213
+
214
+        <div class='row span5 pull-left'>
215
+          <h2>Scripts <small>Generated documentation of DevStack scripts.</small></h2>
216
+          <table class='table table-striped table-bordered'>
217
+            <thead>
218
+              <tr>
219
+                <th>Filename</th>
220
+                <th>Link</th>
221
+              </tr>
222
+            </thead>
223
+            <tbody>
224
+              <tr>
225
+                <td>stack.sh</td>
226
+                <td><a href="stack.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
227
+              </tr>
228
+              <tr>
229
+                <td>functions</td>
230
+                <td><a href="functions.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
231
+              </tr>
232
+              <tr>
233
+                <td>lib/apache</td>
234
+                <td><a href="lib/apache.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
235
+              </tr>
236
+              <tr>
237
+                <td>lib/baremetal</td>
238
+                <td><a href="lib/baremetal.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
239
+              </tr>
240
+              <tr>
241
+                <td>lib/ceilometer</td>
242
+                <td><a href="lib/ceilometer.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
243
+              </tr>
244
+              <tr>
245
+                <td>lib/cinder</td>
246
+                <td><a href="lib/cinder.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
247
+              </tr>
248
+              <tr>
249
+                <td>lib/config</td>
250
+                <td><a href="lib/config.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
251
+              </tr>
252
+              <tr>
253
+                <td>lib/database</td>
254
+                <td><a href="lib/database.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
255
+              </tr>
256
+              <tr>
257
+                <td>lib/glance</td>
258
+                <td><a href="lib/glance.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
259
+              </tr>
260
+              <tr>
261
+                <td>lib/heat</td>
262
+                <td><a href="lib/heat.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
263
+              </tr>
264
+              <tr>
265
+                <td>lib/horizon</td>
266
+                <td><a href="lib/horizon.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
267
+              </tr>
268
+              <tr>
269
+                <td>lib/infra</td>
270
+                <td><a href="lib/infra.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
271
+              </tr>
272
+              <tr>
273
+                <td>lib/ironic</td>
274
+                <td><a href="lib/ironic.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
275
+              </tr>
276
+              <tr>
277
+                <td>lib/keystone</td>
278
+                <td><a href="lib/keystone.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
279
+              </tr>
280
+              <tr>
281
+                <td>lib/ldap</td>
282
+                <td><a href="lib/ldap.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
283
+              </tr>
284
+              <tr>
285
+                <td>lib/marconi</td>
286
+                <td><a href="lib/marconi.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
287
+              </tr>
288
+              <tr>
289
+                <td>lib/neutron</td>
290
+                <td><a href="lib/neutron.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
291
+              </tr>
292
+              <tr>
293
+                <td>lib/nova</td>
294
+                <td><a href="lib/nova.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
295
+              </tr>
296
+              <tr>
297
+                <td>lib/oslo</td>
298
+                <td><a href="lib/oslo.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
299
+              </tr>
300
+              <tr>
301
+                <td>lib/rpc_backend</td>
302
+                <td><a href="lib/rpc_backend.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
303
+              </tr>
304
+              <tr>
305
+                <td>lib/savanna</td>
306
+                <td><a href="lib/savanna.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
307
+              </tr>
308
+              <tr>
309
+                <td>lib/savanna-dashboard</td>
310
+                <td><a href="lib/savanna-dashboard.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
311
+              </tr>
312
+              <tr>
313
+                <td>lib/stackforge</td>
314
+                <td><a href="lib/stackforge.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
315
+              </tr>
316
+              <tr>
317
+                <td>lib/swift</td>
318
+                <td><a href="lib/swift.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
319
+              </tr>
320
+              <tr>
321
+                <td>lib/tempest</td>
322
+                <td><a href="lib/tempest.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
323
+              </tr>
324
+              <tr>
325
+                <td>lib/tls</td>
326
+                <td><a href="lib/tls.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
327
+              </tr>
328
+              <tr>
329
+                <td>lib/trove</td>
330
+                <td><a href="lib/trove.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
331
+              </tr>
332
+              <tr>
333
+                <td>unstack.sh</td>
334
+                <td><a href="unstack.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
335
+              </tr>
336
+              <tr>
337
+                <td>clean.sh</td>
338
+                <td><a href="clean.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
339
+              </tr>
340
+              <tr>
341
+                <td>run_tests.sh</td>
342
+                <td><a href="run_tests.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
343
+              </tr>
344
+              <tr>
345
+                <td>extras.d/70-marconi.sh</td>
346
+                <td><a href="extras.d/70-marconi.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
347
+              </tr>
348
+              <tr>
349
+                <td>extras.d/70-savanna.sh</td>
350
+                <td><a href="extras.d/70-savanna.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
351
+              </tr>
352
+              <tr>
353
+                <td>extras.d/80-tempest.sh</td>
354
+                <td><a href="extras.d/80-tempest.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
355
+              </tr>
356
+              <tr>
357
+                <td>tools/info.sh</td>
358
+                <td><a href="tools/info.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
359
+              </tr>
360
+              <tr>
361
+                <td>tools/build_docs.sh</td>
362
+                <td><a href="tools/build_docs.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
363
+              </tr>
364
+              <tr>
365
+                <td>tools/create_userrc.sh</td>
366
+                <td><a href="tools/create_userrc.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
367
+              </tr>
368
+              <tr>
369
+                <td>tools/fixup_stuff.sh</td>
370
+                <td><a href="tools/fixup_stuff.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
371
+              </tr>
372
+              <tr>
373
+                <td>tools/install_prereqs.sh</td>
374
+                <td><a href="tools/install_prereqs.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
375
+              </tr>
376
+              <tr>
377
+                <td>tools/install_pip.sh</td>
378
+                <td><a href="tools/install_pip.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
379
+              </tr>
380
+              <tr>
381
+                <td>tools/upload_image.sh</td>
382
+                <td><a href="tools/upload_image.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
383
+              </tr>
384
+            </tbody>
385
+            <tfoot>
386
+              <td colspan="3">40 bash scripts</td>
387
+            </tfoot>
388
+          </table>
389
+        </div>
390
+
391
+        <div class='span5 pull-right'>
392
+          <h2>Configuration <small>Setting the table</small></h2>
393
+          <table class='table table-striped table-bordered'>
394
+            <thead>
395
+              <tr>
396
+                <th>Filename</th>
397
+                <th>Link</th>
398
+              </tr>
399
+            </thead>
400
+            <tbody>
401
+              <tr>
402
+                <td>local.conf</td>
403
+                <td><a href="local.conf.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
404
+              </tr>
405
+              <tr>
406
+                <td>stackrc</td>
407
+                <td><a href="stackrc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
408
+              </tr>
409
+              <tr>
410
+                <td>openrc</td>
411
+                <td><a href="openrc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
412
+              </tr>
413
+              <tr>
414
+                <td>exerciserc</td>
415
+                <td><a href="exerciserc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
416
+              </tr>
417
+              <tr>
418
+                <td>eucarc</td>
419
+                <td><a href="eucarc.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
420
+              </tr>
421
+            </tbody>
422
+            <tfoot>
423
+              <td colspan="3">5 configuration files</td>
424
+            </tfoot>
425
+          </table>
426
+
427
+          <h2>Samples <small>Generated documentation of DevStack sample files.</small></h2>
428
+          <table class='table table-striped table-bordered'>
429
+            <thead>
430
+              <tr>
431
+                <th>Filename</th>
432
+                <th>Link</th>
433
+              </tr>
434
+            </thead>
435
+            <tbody>
436
+              <tr>
437
+                <td>local.sh</td>
438
+                <td><a href="samples/local.sh.html" class="btn btn-small btn-success table-action">Read &raquo;</a></td>
439
+              </tr>
440
+              <tr>
441
+                <td>localrc</td>
442
+                <td><a href="samples/localrc.html" class="btn btn-small btn-success table-action">Read &raquo;</a></td>
443
+              </tr>
444
+            </tbody>
445
+            <tfoot>
446
+              <td colspan="3">2 sample files</td>
447
+            </tfoot>
448
+          </table>
449
+
450
+        <div class='row span5 pull-right'>
451
+          <h2>Exercises <small>Generated documentation of DevStack scripts.</small></h2>
452
+          <table class='table table-striped table-bordered'>
453
+            <thead>
454
+              <tr>
455
+                <th>Filename</th>
456
+                <th>Link</th>
457
+              </tr>
458
+            </thead>
459
+            <tbody>
460
+              <tr>
461
+                <td>exercise.sh</td>
462
+                <td><a href="exercise.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
463
+              </tr>
464
+              <tr>
465
+                <td>exercises/aggregates.sh</td>
466
+                <td><a href="exercises/aggregates.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
467
+              </tr>
468
+              <tr>
469
+                <td>exercises/boot_from_volume.sh</td>
470
+                <td><a href="exercises/boot_from_volume.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
471
+              </tr>
472
+              <tr>
473
+                <td>exercises/bundle.sh</td>
474
+                <td><a href="exercises/bundle.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
475
+              </tr>
476
+              <tr>
477
+                <td>exercises/client-args.sh</td>
478
+                <td><a href="exercises/client-args.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
479
+              </tr>
480
+              <tr>
481
+                <td>exercises/client-env.sh</td>
482
+                <td><a href="exercises/client-env.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
483
+              </tr>
484
+              <tr>
485
+                <td>exercises/euca.sh</td>
486
+                <td><a href="exercises/euca.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
487
+              </tr>
488
+              <tr>
489
+                <td>exercises/floating_ips.sh</td>
490
+                <td><a href="exercises/floating_ips.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
491
+              </tr>
492
+              <tr>
493
+                <td>exercises/horizon.sh</td>
494
+                <td><a href="exercises/horizon.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
495
+              </tr>
496
+              <tr>
497
+                <td>exercises/neutron-adv-test.sh</td>
498
+                <td><a href="exercises/neutron-adv-test.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
499
+              </tr>
500
+              <tr>
501
+                <td>exercises/sec_groups.sh</td>
502
+                <td><a href="exercises/sec_groups.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
503
+              </tr>
504
+              <tr>
505
+                <td>exercises/swift.sh</td>
506
+                <td><a href="exercises/swift.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
507
+              </tr>
508
+              <tr>
509
+                <td>exercises/volumes.sh</td>
510
+                <td><a href="exercises/volumes.sh.html" class="btn btn-small btn-primary table-action">Read &raquo;</a></td>
511
+              </tr>
512
+            </tbody>
513
+            <tfoot>
514
+              <td colspan="3">13 exercise scripts</td>
515
+            </tfoot>
516
+          </table>
517
+
518
+        </div>
519
+
520
+      </section>
521
+
522
+      <footer>
523
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
524
+      </footer>
525
+
526
+    </div> <!-- /container -->
527
+  </body>
528
+</html>
0 529
new file mode 100644
... ...
@@ -0,0 +1,64 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - local.conf</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>local.conf <small>User settings</small></h2>
48
+          <p><code>local.conf</code> is a user-maintained setings file that is
49
+          sourced in <code>stackrc</code>.  It contains a section that replaces
50
+          the historical <code>localrc</code> file.  See
51
+          <a href="configuration.html">the description of local.conf</a> for
52
+          more details about the mechanics of the file.</p>
53
+        </div>
54
+      </section
55
+
56
+      <footer>
57
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
58
+      </footer>
59
+
60
+    </div> <!-- /container -->
61
+
62
+  </body>
63
+</html>
0 64
new file mode 100644
... ...
@@ -0,0 +1,60 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - localrc</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>localrc <small>User settings</small></h2>
48
+          <p><code>localrc</code> is the old file used to configure DevStack.  It is deprecated and has been replaced by <a href="local.conf.html"><code>local.conf</code></a>.  DevStack will continue to use <code>localrc</code> if it is present and ignore the <code>localrc</code> section in <code>local.conf.</code>.   Remove <code>localrc</code> to switch to using the new file.</p>
49
+        </div>
50
+      </section
51
+
52
+      <footer>
53
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
54
+      </footer>
55
+
56
+    </div> <!-- /container -->
57
+
58
+  </body>
59
+</html>
0 60
new file mode 100644
... ...
@@ -0,0 +1,115 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - openrc</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>openrc <small>User authentication settings</small></h2>
48
+          <p><code>openrc</code> configures login credentials suitable for use
49
+          with the OpenStack command-line tools.  <code>openrc</code> sources
50
+          <code>stackrc</code> at the beginning (which in turn sources
51
+          the <code>localrc</code> setion of <code>local.conf</code>) in
52
+          order to pick up <code>HOST_IP</code>
53
+          and/or <code>SERVICE_HOST</code> to use in the endpoints.
54
+          The values shown below are the default values.</p>
55
+        </div>
56
+        <dl>
57
+
58
+          <dt>OS_TENANT_NAME</dt>
59
+          <dd>The introduction of Keystone to the OpenStack ecosystem has standardized the
60
+            term <em>tenant</em> as the entity that owns resources.  In some places references
61
+            still exist to the original Nova term <em>project</em> for this use.  Also,
62
+            <em>tenant_name</em> is prefered to <em>tenant_id</em>.
63
+            <pre>OS_TENANT_NAME=demo</pre></dd>
64
+
65
+          <dt>OS_USERNAME</dt>
66
+          <dd>In addition to the owning entity (tenant), Nova stores the entity performing
67
+            the action as the <em>user</em>.
68
+            <pre>OS_USERNAME=demo</pre></dd>
69
+
70
+          <dt>OS_PASSWORD</dt>
71
+          <dd>With Keystone you pass the keystone password instead of an api key.
72
+            Recent versions of novaclient use OS_PASSWORD instead of NOVA_API_KEYs
73
+            or NOVA_PASSWORD.
74
+            <pre>OS_PASSWORD=secrete</pre></dd>
75
+
76
+          <dt>HOST_IP, SERVICE_HOST</dt>
77
+          <dd>Set API endpoint host using <code>HOST_IP</code>.  <code>SERVICE_HOST</code>
78
+            may also be used to specify the endpoint, which is convenient for
79
+            some <code>localrc</code> configurations.  Typically, <code>HOST_IP</code>
80
+            is set in the <code>localrc</code> section.
81
+            <pre>HOST_IP=127.0.0.1
82
+SERVICE_HOST=$HOST_IP</pre></dd>
83
+
84
+          <dt>OS_AUTH_URL</dt>
85
+          <dd>Authenticating against an OpenStack cloud using Keystone returns a <em>Token</em>
86
+            and <em>Service Catalog</em>.  The catalog contains the endpoints for all services
87
+            the user/tenant has access to - including Nova, Glance, Keystone and Swift.
88
+            <pre>OS_AUTH_URL=http://$SERVICE_HOST:5000/v2.0</pre></dd>
89
+
90
+          <dt>GLANCE_HOST</dt>
91
+          <dd>Some exercises call Glance directly.  On a single-node installation, Glance
92
+            should be listening on <code>HOST_IP</code>.  If its running elsewhere
93
+            it can be set here.
94
+            <pre>GLANCE_HOST=$HOST_IP</pre></dd>
95
+
96
+          <dt>KEYSTONECLIENT_DEBUG, NOVACLIENT_DEBUG</dt>
97
+          <dd>Set command-line client log level to <code>DEBUG</code>.  These are
98
+            commented out by default.
99
+            <pre># export KEYSTONECLIENT_DEBUG=1
100
+# export NOVACLIENT_DEBUG=1</pre></dd>
101
+
102
+        </dl>
103
+      </section
104
+
105
+      <footer>
106
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An
107
+        <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a>
108
+        created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
109
+      </footer>
110
+
111
+    </div> <!-- /container -->
112
+
113
+  </body>
114
+</html>
0 115
new file mode 100644
... ...
@@ -0,0 +1,118 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Overview</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+      
45
+      <section id="overview" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>Overview <small>DevStack from a cloud-height view</small></h2>
49
+          <p>DevStack is not and has never been intended to be a general OpenStack installer.  It has evolved to support a large number of configuration options and alternative platforms and support services.  However, that evolution has grown well beyond what was originally intended and the majority of configuration combinations are rarely, if ever, tested.  DevStack was never meant to be everything to everyone and can not continue in that direction.</p>
50
+          <p>Below is a list of what is specifically is supported (read that as "tested and assumed to work") going forward.</p>
51
+
52
+          <h2>Supported Components</h2>
53
+
54
+          <h3>Base OS</h3>
55
+          <p><em>The OpenStack Technical Committee (TC) has defined the current CI strategy to include the latest Ubuntu release and the latest RHEL release (for Python 2.6 testing).</em></p>
56
+          <ul>
57
+            <li>Ubuntu: current LTS release plus current development release</li>
58
+            <li>Fedora: current release plus previous release</li>
59
+            <li>RHEL: current major release</li>
60
+            <li>Other OS platforms may continue to be included but the maintenance of those platforms shall not be assumed simply due to their presence.  Having a listed point-of-contact for each additional OS will greatly increase its chance of being well-maintained.</li>
61
+            <li>Patches for Ubuntu and/or Fedora will not be held up due to side-effects on other OS platforms.</li>
62
+          </ul>
63
+
64
+          <h3>Databases</h3>
65
+          <p><em>As packaged by the host OS</em></p>
66
+          <ul>
67
+            <li>MySQL</li>
68
+            <li>PostgreSQL</li>
69
+          </ul>
70
+
71
+          <h3>Queues</h3>
72
+          <p><em>As packaged by the host OS</em></p>
73
+          <ul>
74
+            <li>Rabbit</li>
75
+            <li>Qpid</li>
76
+<!--
77
+            <li>ZeroMQ</li>
78
+-->
79
+          </ul>
80
+
81
+          <h3>Web Server</h3>
82
+          <p><em>As packaged by the host OS</em></p>
83
+          <ul>
84
+            <li>Apache</li>
85
+          </ul>
86
+
87
+          <h3>OpenStack Network</h3>
88
+          <p><em>Default to Nova Network, optionally use Neutron</em></p>
89
+          <ul>
90
+            <li>Nova Network: FlatDHCP</li>
91
+            <li>Neutron: A basic configuration approximating the original FlatDHCP mode using linuxbridge or OpenVSwitch.</li>
92
+          </ul>
93
+
94
+          <h3>Services</h3>
95
+          <p>The default services configured by DevStack are Identity (Keystone), Object Storage (Swift), Image Storage (Glance), Block Storage (Cinder), Compute (Nova), Network (Nova), Dashboard (Horizon)</p>
96
+          <p>Additional services not included directly in DevStack can be tied in to <code>stack.sh</code> using the <a href="plugins.html">plugin mechanism</a> to call scripts that perform the configuration and startup of the service.</p>
97
+
98
+          <h3>Node Configurations</h3>
99
+          <ul>
100
+            <li>single node</li>
101
+            <li>multi-node is not tested regularly by the core team, and even then only minimal configurations are reviewed</li>
102
+          </ul>
103
+
104
+          <h3>Exercises</h3>
105
+          <p>The DevStack exercise scripts have been replaced as integration and gating test with Tempest.  They will continue to be maintained as they are valuable as demonstrations of using OpenStack from the command line and for quick operational testing.</p>
106
+
107
+        </div>        
108
+
109
+      </section>
110
+
111
+      <footer>
112
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
113
+      </footer>
114
+
115
+    </div> <!-- /container -->
116
+  </body>
117
+</html>
0 118
new file mode 100644
... ...
@@ -0,0 +1,136 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - Plugins</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container" id="home">
44
+      
45
+      <section id="faq" class="span12">
46
+
47
+        <div class='row pull-left'>
48
+          <h2>Plugins <small>Add stuff</small></h2>
49
+          <p>DevStack has a couple of plugin mechanisms to allow easily adding support for additional projects and features.</p>
50
+
51
+          <h3>Extras.d Hooks</h3>
52
+          <p>These relatively new hooks are an extension of the existing calls from <code>stack.sh</code> at the end of its run, plus <code>unstack.sh</code> and <code>clean.sh</code>.  A number of the higher-layer projects are implemented in DevStack using this mechanism.</p>
53
+
54
+          <p>The script in <code>extras.d</code> is expected to be mostly a dispatcher to functions in a <code>lib/*</code> script.  The scripts are named with a zero-padded two digits sequence number prefix to control the order that the scripts are called, and with a suffix of <code>.sh</code>.  DevSack reserves for itself the sequence numbers 00 through 09 and 90 through 99.</p>
55
+
56
+          <p>Below is a template that shows handlers for the possible command-line arguments:</p>
57
+
58
+<pre>
59
+# template.sh - DevStack extras.d dispatch script template
60
+
61
+# check for service enabled
62
+if is_service_enabled template; then
63
+
64
+    if [[ "$1" == "source" ]]; then
65
+        # Initial source of lib script
66
+        source $TOP_DIR/lib/template
67
+    fi
68
+
69
+    if [[ "$1" == "stack" && "$2" == "install" ]]; then
70
+        # Perform installation of service source
71
+        echo_summary "Installing Template"
72
+        install_template
73
+
74
+    elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
75
+        # Configure after the other layer 1 and 2 services have been configured
76
+        echo_summary "Configuring Template"
77
+        configure_template
78
+
79
+    elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
80
+        # Initialize and start the template service
81
+        echo_summary "Initializing Template"
82
+        ##init_template
83
+    fi
84
+
85
+    if [[ "$1" == "unstack" ]]; then
86
+        # Shut down template services
87
+        # no-op
88
+        :
89
+    fi
90
+
91
+    if [[ "$1" == "clean" ]]; then
92
+        # Remove state and transient data
93
+        # Remember clean.sh first calls unstack.sh
94
+        # no-op
95
+        :
96
+    fi
97
+fi
98
+</pre>
99
+
100
+          <p>The arguments are:
101
+          <ul>
102
+            <li><strong>source</strong> - Called by each script that utilizes <code>extras.d</code> hooks; this replaces directly sourcing the <code>lib/*</code> script.</li>
103
+            <li><strong>stack</strong> - Called by <code>stack.sh</code> three times for different phases of its run:
104
+              <ul>
105
+                <li><strong>install</strong> - Called after the layer 1 and 2 projects source and their dependencies have been installed.</li>
106
+                <li><strong>post-config</strong> - Called after the layer 1 and 2 services have been configured.  All configuration files for enabled services should exist at this point.</li>
107
+                <li><strong>extra</strong> - Called near the end after layer 1 and 2 services have been started.  This is the existing hook and has not otherwise changed.</li>
108
+              </ul></li>
109
+            <li><strong>unstack</strong> - Called by <code>unstack.sh</code> before other services are shut down.</li>
110
+            <li><strong>clean</strong> - Called by <code>clean.sh</code> before other services are cleaned, but after <code>unstack.sh</code> has been called.
111
+          </ul></p>
112
+
113
+
114
+          <h3>Hypervisor</h3>
115
+          <p>Hypervisor plugins are fairly new and condense most hypervisor configuration into one place.</p>
116
+
117
+          <p>The initial plugin implemented was for Docker support and is a useful template for the required support.  Plugins are placed in <code>lib/nova_plugins</code> and named <code>hypervisor-&lt;name&gt;</code> where <code>&lt;name&gt;</code> is the value of <code>VIRT_DRIVER</code>.  Plugins must define the following functions:</p>
118
+            <ul>
119
+              <li><code>install_nova_hypervisor</code> - install any external requirements</li>
120
+              <li><code>configure_nova_hypervisor</code> - make configuration changes, including those to other services</li>
121
+              <li><code>start_nova_hypervisor</code> - start any external services</li>
122
+              <li><code>stop_nova_hypervisor</code> - stop any external services</li>
123
+              <li><code>cleanup_nova_hypervisor</code> - remove transient data and cache</li>
124
+            </ul>
125
+        </div>        
126
+
127
+      </section>
128
+
129
+      <footer>
130
+        <p>&copy; Openstack Foundation 2011-2013 &mdash; An <a href="https://wiki.openstack.org/wiki/Programs">OpenStack program</a> created by <a href="http://www.rackspace.com/cloud/private_edition/">Rackspace Cloud Builders</a></p>
131
+      </footer>
132
+
133
+    </div> <!-- /container -->
134
+  </body>
135
+</html>
0 136
new file mode 100644
... ...
@@ -0,0 +1,101 @@
0
+<!DOCTYPE html>
1
+<html lang="en">
2
+  <head>
3
+    <meta charset="utf-8">
4
+    <title>DevStack - stackrc</title>
5
+    <meta name="description" content="">
6
+    <meta name="author" content="">
7
+
8
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
9
+    <!--[if lt IE 9]>
10
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
11
+    <![endif]-->
12
+
13
+    <!-- Le styles -->
14
+    <link href="assets/css/bootstrap.css" rel="stylesheet">
15
+    <link href="assets/css/local.css" rel="stylesheet">
16
+    <style type="text/css">
17
+      body { padding-top: 60px; }
18
+      dd { padding: 10px; }
19
+    </style>
20
+    
21
+    <!-- Le javascripts -->
22
+    <script src="../assets/js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
23
+    <script src="../assets/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
24
+  </head>
25
+
26
+  <body>
27
+
28
+    <div class="navbar navbar-fixed-top">
29
+      <div class="navbar-inner">
30
+        <div class="container">
31
+          <a class="brand" href="/">DevStack</a>
32
+          <ul class="nav pull-right">
33
+            <li><a href="overview.html">Overview</a></li>
34
+            <li><a href="changes.html">Changes</a></li>
35
+            <li><a href="faq.html">FAQ</a></li>
36
+            <li><a href="http://github.com/openstack-dev/devstack">GitHub</a></li>
37
+            <li><a href="https://review.openstack.org/#/q/status:open+project:openstack-dev/devstack,n,z">Gerrit</a></li>
38
+          </ul>
39
+        </div>
40
+      </div>
41
+    </div>
42
+
43
+    <div class="container">
44
+
45
+      <section class="span12">
46
+        <div class="page-header">
47
+          <h2>stackrc <small>DevStack settings</small></h2>
48
+          <p><code>stackrc</code> is the primary configuration file for DevStack.
49
+          It contains all of the settings that control the services started
50
+          and the repositories used to download the source for those services.
51
+          <code>stackrc</code> sources the <code>localrc</code> section of
52
+          <code>local.conf</code> to perform the default overrides.</p>
53
+        </div>
54
+        <dl>
55
+
56
+          <dt>DATABASE_TYPE</dt>
57
+          <dd>Select the database backend to use.  The default is <code>mysql</code>,
58
+          <code>postgresql</code> is also available.</dd>
59
+
60
+          <dt>ENABLED_SERVICES</dt>
61
+          <dd>Specify which services to launch.  These generally correspond to
62
+            screen tabs. 
63
+            The default includes: Glance (API and Registry), Keystone, Nova (API,
64
+            Certificate, Object Store, Compute, Network, Scheduler, VNC proxies,
65
+            Certificate Authentication), Cinder (Scheduler, API, Volume), Horizon, MySQL, RabbitMQ, Tempest.
66
+            <pre>ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,$DATABASE_TYPE</pre>
67
+            Other services that are not enabled by default can be enabled in
68
+            <code>localrc</code>. For example, to add Swift:
69
+            <pre>enable_service swift</pre>
70
+            A service can similarly be disabled:
71
+            <pre>disable_service horizon</pre></dd>
72
+
73
+          <dt>Service Repos</dt>
74
+          <dd>The Git repositories used to check out the source for each service
75
+            are controlled by a pair of variables set for each service.  
76
+            <code>*_REPO</code> points to the repository and <code>*_BRANCH</code>
77
+            selects which branch to check out.  These may be overridden in
78
+            <code>local.conf</code> to pull source from a different repo for testing,
79
+            such as a Gerrit branch proposal.  <code>GIT_BASE</code> points to the primary repository server.
80
+            <pre>NOVA_REPO=$GIT_BASE/openstack/nova.git
81
+NOVA_BRANCH=master</pre>
82
+            To pull a branch directly from Gerrit, get the repo and branch from the 
83
+            Gerrit review page:
84
+            <pre>git fetch https://review.openstack.org/p/openstack/nova refs/changes/50/5050/1 && git checkout FETCH_HEAD</pre>
85
+            The repo is the stanza following <code>fetch</code> and the branch
86
+            is the stanza following that:
87
+            <pre>NOVA_REPO=https://review.openstack.org/p/openstack/nova
88
+NOVA_BRANCH=refs/changes/50/5050/1</pre></dd>
89
+
90
+        </dl>
91
+      </section
92
+
93
+      <footer>
94
+        <p>&copy; Openstack Foundation 2011-2014 &mdash; An <a href="https://www.openstack.org/">OpenStack</a> <a href="https://wiki.openstack.org/wiki/Programs">program</a></p>
95
+      </footer>
96
+
97
+    </div> <!-- /container -->
98
+
99
+  </body>
100
+</html>
... ...
@@ -2,21 +2,22 @@
2 2
 
3 3
 # **build_docs.sh** - Build the gh-pages docs for DevStack
4 4
 #
5
-# - Install shocco if not found on PATH
5
+# - Install shocco if not found on PATH and INSTALL_SHOCCO is set
6 6
 # - Clone MASTER_REPO branch MASTER_BRANCH
7
-# - Re-creates ``docs`` directory from existing repo + new generated script docs
7
+# - Re-creates ``docs/html`` directory from existing repo + new generated script docs
8 8
 
9 9
 # Usage:
10
-## build_docs.sh [[-b branch] [-p] repo] | .
11
-## -b branch        The DevStack branch to check out (default is master; ignored if
12
-##                  repo is not specified)
13
-## -p               Push the resulting docs tree to the source repo; fatal error if
14
-##                  repo is not specified
15
-## repo             The DevStack repository to clone (default is DevStack github repo)
10
+## build_docs.sh [-o <out-dir>] [-g] [master|<repo> [<branch>]]
11
+## <repo>           The DevStack repository to clone (default is DevStack github repo)
16 12
 ##                  If a repo is not supplied use the current directory
17 13
 ##                  (assumed to be a DevStack checkout) as the source.
14
+## <branch>         The DevStack branch to check out (default is master; ignored if
15
+##                  repo is not specified)
18 16
 ## .                Use the current repo and branch (do not use with -p to
19 17
 ##                  prevent stray files in the workspace being added tot he docs)
18
+## -o <out-dir>     Write the static HTML output to <out-dir>
19
+##                  (Note that <out-dir> will be deleted and re-created to ensure it is clean)
20
+## -g               Update the old gh-pages repo  (set PUSH=1 to actualy push up to RCB)
20 21
 
21 22
 # Defaults
22 23
 # --------
... ...
@@ -28,6 +29,9 @@ MASTER_BRANCH=${MASTER_BRANCH:-master}
28 28
 # http://devstack.org is a GitHub gh-pages site in the https://github.com/cloudbuilders/devtack.git repo
29 29
 GH_PAGES_REPO=git@github.com:cloudbuilders/devstack.git
30 30
 
31
+DOCS_SOURCE=docs/source
32
+HTML_BUILD=docs/html
33
+
31 34
 # Keep track of the devstack directory
32 35
 TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
33 36
 
... ...
@@ -49,97 +53,110 @@ if ! which shocco; then
49 49
         git clone -b rst_support https://github.com/dtroyer/shocco shocco
50 50
         cd shocco
51 51
         ./configure
52
-        make
52
+        make || exit
53 53
         cd ..
54 54
     fi
55 55
     SHOCCO=$TOP_DIR/shocco/shocco
56 56
 fi
57 57
 
58 58
 # Process command-line args
59
-while getopts b:p c; do
59
+while getopts go: c; do
60 60
     case $c in
61
-        b)  MASTER_BRANCH=$OPTARG
61
+        g)  GH_UPDATE=1
62 62
             ;;
63
-        p)  PUSH_REPO=1
63
+        o)  HTML_BUILD=$OPTARG
64 64
             ;;
65 65
     esac
66 66
 done
67 67
 shift `expr $OPTIND - 1`
68 68
 
69
-# Sanity check the args
70
-if [[ "$1" == "." ]]; then
71
-    REPO=""
72
-    if [[ -n $PUSH_REPO ]]; then
73
-        echo "Push not allowed from an active workspace"
74
-        unset PUSH_REPO
75
-    fi
76
-else
77
-    if [[ -z "$1" ]]; then
69
+
70
+if [[ -n "$1" ]]; then
71
+    master="master"
72
+    if [[ "${master/#$1}" != "master" ]]; then
73
+        # Partial match on "master"
78 74
         REPO=$MASTER_REPO
79 75
     else
80 76
         REPO=$1
81 77
     fi
78
+    REPO_BRANCH=${2:-$MASTER_BRANCH}
82 79
 fi
83 80
 
84 81
 # Check out a specific DevStack branch
85 82
 if [[ -n $REPO ]]; then
86 83
     # Make a workspace
87
-    TMP_ROOT=$(mktemp -d devstack-docs-XXXX)
84
+    TMP_ROOT=$(mktemp -d work-docs-XXXX)
88 85
     echo "Building docs in $TMP_ROOT"
89 86
     cd $TMP_ROOT
90 87
 
91 88
     # Get the master branch
92 89
     git clone $REPO devstack
93 90
     cd devstack
94
-    git checkout $MASTER_BRANCH
91
+    if [[ -n "$REPO_BRANCH" ]]; then
92
+        git checkout $REPO_BRANCH
93
+    fi
95 94
 fi
96 95
 
96
+# Assumption is we are now in the DevStack workspace to be processed
97
+
97 98
 # Processing
98 99
 # ----------
99 100
 
100
-# Assumption is we are now in the DevStack repo workspace to be processed
101
+# Clean up build dir
102
+rm -rf $HTML_BUILD
103
+mkdir -p $HTML_BUILD
101 104
 
102
-# Pull the latest docs branch from devstack.org repo
103
-if ! [ -d docs ]; then
104
-    git clone -b gh-pages $GH_PAGES_REPO docs
105
-fi
105
+# Get fully qualified dirs
106
+FQ_DOCS_SOURCE=$(cd $DOCS_SOURCE && pwd)
107
+FQ_HTML_BUILD=$(cd $HTML_BUILD && pwd)
108
+
109
+# Get repo static
110
+cp -pr $FQ_DOCS_SOURCE/* $FQ_HTML_BUILD
106 111
 
107 112
 # Build list of scripts to process
108 113
 FILES=""
109 114
 for f in $(find . -name .git -prune -o \( -type f -name \*.sh -not -path \*shocco/\* -print \)); do
110 115
     echo $f
111 116
     FILES+="$f "
112
-    mkdir -p docs/`dirname $f`;
113
-    $SHOCCO $f > docs/$f.html
117
+    mkdir -p $FQ_HTML_BUILD/`dirname $f`;
118
+    $SHOCCO $f > $FQ_HTML_BUILD/$f.html
114 119
 done
115
-for f in $(find functions lib samples -type f -name \*); do
120
+for f in $(find functions functions-common lib samples -type f -name \*); do
116 121
     echo $f
117 122
     FILES+="$f "
118
-    mkdir -p docs/`dirname $f`;
119
-    $SHOCCO $f > docs/$f.html
123
+    mkdir -p $FQ_HTML_BUILD/`dirname $f`;
124
+    $SHOCCO $f > $FQ_HTML_BUILD/$f.html
120 125
 done
121
-echo "$FILES" >docs-files
126
+echo "$FILES" >docs/files
122 127
 
123
-# Switch to the gh_pages repo
124
-cd docs
128
+if [[ -n $GH_UPDATE ]]; then
129
+    GH_ROOT=$(mktemp -d work-gh-XXXX)
130
+    cd $GH_ROOT
125 131
 
126
-# Collect the new generated pages
127
-find . -name \*.html -print0 | xargs -0 git add
132
+    # Pull the latest docs branch from devstack.org repo
133
+    git clone -b gh-pages $GH_PAGES_REPO gh-docs
128 134
 
129
-# Push our changes back up to the docs branch
130
-if ! git diff-index HEAD --quiet; then
131
-    git commit -a -m "Update script docs"
132
-    if [[ -n $PUSH ]]; then
133
-        git push
135
+    # Get the generated files
136
+    cp -pr $FQ_HTML_BUILD/* gh-docs
137
+
138
+    # Collect the new generated pages
139
+    (cd gh-docs; find . -name \*.html -print0 | xargs -0 git add)
140
+
141
+    # Push our changes back up to the docs branch
142
+    if ! git diff-index HEAD --quiet; then
143
+        git commit -a -m "Update script docs"
144
+        if [[ -n $PUSH ]]; then
145
+            git push
146
+        fi
134 147
     fi
135 148
 fi
136 149
 
137 150
 # Clean up or report the temp workspace
138 151
 if [[ -n REPO && -n $PUSH_REPO ]]; then
139
-    rm -rf $TMP_ROOT
152
+    echo rm -rf $TMP_ROOT
140 153
 else
141 154
     if [[ -z "$TMP_ROOT" ]]; then
142 155
         TMP_ROOT="$(pwd)"
143 156
     fi
144
-    echo "Built docs in $TMP_ROOT"
157
+    echo "Built docs in $HTML_BUILD"
145 158
 fi