
<html>
<!--
  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.
-->
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Login to Apache Sling</title>
        <link href="/content/starter/css/bundle.css" rel="stylesheet" />
    </head>
    <body>
        <div class="Grid Fit-Medium Home-Grid">
            <div class="Gradient"></div>
            <header class="Cell Medium-35 Large-25 Align-Center Logos">
                <a href="http://sling.apache.org" target="_blank" id="sling-logo" title="Visit the Apache Sling website">
                    <img src="/content/starter/sling-logo.svg" alt="Apache Sling Logo"/>
                </a>
                <a href="http://apache.org" target="_blank" id="asf-logo" title="Visit the Apache Software Foundation website">
                    <img src="/content/starter/img/asf-logo.svg" alt="Apache Software Foundation Logo"/>
                </a>
            </header>
            <div class="Cell Align-Center Main-Content">
                <div class="Grid">
                    <section class="Cell Medium-35">
                    	<h3>Login:</h3>
						<form id="loginform" method="POST" action="${requestContextPath}/j_security_check" enctype="multipart/form-data" accept-charset="UTF-8">
							<input type="hidden" name="_charset_" value="UTF-8" />
							<input type="hidden" name="resource" value="${resource}" />
							<div id="error">
								<p>${j_reason}</p>
							</div>
							<div>
								<label for="j_username" >Username:</label>
							</div>
							<div>
								<input id="j_username" name="j_username" type="text" />
							</div>
							<div>
								<label for="j_password" accesskey="p">Password:</label>
							</div>
							<div>
								<input id="j_password" name="j_password" type="password" />
							</div>
							<div class="buttongroup">
								<button id="login" class="form-button" type="submit">Login</button>
							</div>
						</form>
                    </section>
                    <div class="Cell Medium-65">
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>
