
<!--
Copyright 2017-present Open Networking Foundation

Licensed 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 lang="en" ng-app="xos-rcord-gui-extension">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
  <link href="/xos/loader.css" rel="stylesheet">
  <link href="/xos/app.css" rel="stylesheet">
</head>
<body>
  <div ui-view></div>
  <script src="/xos/vendor.js"></script>
  <script src="/xos/app.js"></script>
  <script src="/xos/loader.js"></script>
  <script src="/xos/app.config.js"></script>
  <script src="/xos/style.config.js"></script>
</body>
</html>