<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->

<!doctype html>
<html>
	{% include head.html %}
	<body>
		{% include header.html %}
		
		<div class="container">
			<div class="row"  style="clear:both;">
				<div class="col-md-8 col-lg-8 col-xs-12 col-sm-12 aside2" style="float:right;">
					<div id="container" class="docs">
						<div id="pjax">
							<h1 class="post-title">{{ page.title }}</h1>
							{% if page.version == NULL %}
							{% else %}							
								<p>version: {{page.version}}, since: {{page.since}}</p>
							{% endif %}
							<article class="post-content" >	
							{{ content }}
							</article>
						</div>
					</div>
				</div>
				{% include docs31_nav.html %}
			</div>
		</div>		
		{% include footer.html %}

	<script src="/assets/js/jquery-1.9.1.min.js"></script> 
	<script src="/assets/js/bootstrap.min.js"></script> 
	<script src="/assets/js/main.js"></script>
	</body>
</html>
