
<!--
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-vtr-gui-extension">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <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>
