<!--
 * 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>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js">
<!--<![endif]-->

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Atlas</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width">
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <link rel="icon" href="favicon.ico" type="image/x-icon">
    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
    <link rel="stylesheet" type="text/css" href="css/animate.min.css" />
    <link rel="stylesheet" href="js/libs/backgrid/css/backgrid.css">
    <link rel="stylesheet" href="js/libs/backgrid-filter/css/backgrid-filter.min.css">
    <link rel="stylesheet" href="js/libs/backgrid-paginator/css/backgrid-paginator.css">
    <link rel="stylesheet" href="js/libs/backgrid-orderable-columns/css/backgrid-orderable-columns.css">
    <link rel="stylesheet" href="js/libs/backgrid-sizeable-columns/css/backgrid-sizeable-columns.css">
    <link rel="stylesheet" href="js/libs/select2/css/select2.min.css">
    <link rel="stylesheet" href="js/libs/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="js/libs/jquery-asBreadcrumbs/css/asBreadcrumbs.css">
    <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400italic,600,600italic,700,700italic' rel='stylesheet' type='text/css'>
    <link href="css/bootstrap-sidebar.css" rel="stylesheet">
    <link href="js/libs/font-awesome/css/font-awesome.min.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
</head>

<body>
    <div id="wrapper">
        <div id="sidebar-wrapper" class="sidebar-wrapper">
            <div id="sideNav-wrapper"></div>
        </div>
        <div id="page-content-wrapper" class="page-content-wrapper">
            <header id="new-header" class="clearfix"></header>
            <div id="new-page-wrapper">
                <div>
                    <img class="initialLoading" src="../img/ring.gif">
                </div>
            </div>
        </div>
    </div>
    <!-- build:js scripts/main.js -->
    <script data-main="js/main" src="js/libs/requirejs/require.js"></script>
    <!-- endbuild -->
</body>

</html>
