---
layout: default
---
<div class="sidenav-top">
  <div class="sidenav-brand bg-light">
    <a href="/"><img src="{{ "/assets/img/gem5ColorLong.gif" | prepend: site.baseurl }}" height="55px"></a>
  </div>
  <div class="search">
    <form action="/search" method="get">
      <!-- <label for="search-box"><i class="fa fa-search"></i></label> -->
      <input type="text" name="query">
      <button type="submit" name="submit"><i class="fa fa-search"></i></button>
    </form>
  </div>
</div>
<div class="sidenav">
  <!-- Pull navigation from _data/documentation.yml -->
  {% for doc in site.data.documentation.docs %}
    {% if doc.title == page.doc %}
    {% for item in doc.items %}
      <a class="item" {% if item.url %}href="{{ item.url | prepend: site.baseurl }}"{% else %}data-toggle="collapse" href="#{{ item.id }}"{% endif %} role="button" aria-expanded="false" aria-controls="collapseExample">
        {{ item.title }}
      </a>
      <div class="collapse {% if page.parent == item.id %}show{% endif %}" id="{{ item.id }}">
        {% for subitem in item.subitems %}
          <a class="subitem {% if subitem.page == page.title %}active{% endif %}" href="{{ subitem.url | prepend: site.baseurl }}">{{ subitem.page }}</a>
        {% endfor %}
      </div>
    {% endfor %}
    {% endif %}
  {% endfor %}
</div>


<div class="container" id="doc-container">
  <div class="edit"><a href="{{ site.sourceurl }}">Edit this page</a></div>
  {% if page.author %}<b>authors:</b> {{ page.author }}<br>{% endif %}
  {% if page.date %}<b>last edited:</b> {{ page.date }}<br>{% endif %}

  <br>
  {{ content }}
  <br>

  <!-- RETRIVE PREVIOUS PAGE LINK -->
  {% for item in site.data.documentation.docs %}
    {% if page.parent == item.id %}
      {% assign previous = "none" %}
      {% if item.subitems %}
        {% for subitem in item.subitems %}
          {% if page.title == subitem.page %}
            {% break %}
          {% else %}
            {% assign previous = subitem.url %}
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}
  {% endfor %}

  <!-- RETRIEVE NEXT PAGE LINK -->
  {% for item in site.data.documentation.docs %}
    {% if page.parent == item.id %}
      {% assign next = "none" %}
      {% if item.subitems %}
        {% for subitem in item.subitems reversed %}
          {% if page.title == subitem.page %}
            {% break %}
          {% else %}
            {% assign next = subitem.url %}
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}
  {% endfor %}
  <div class="navbuttons">
    {% if page.previous.url %}
      <a class="prev" href="{{page.previous.url}}"><button type="button" class="btn btn-outline-primary">PREVIOUS</button></a>
    {% endif %}
    {% if page.next.url %}
     <a class="next" href="{{page.next.url}}"><button type="button" class="btn btn-outline-primary">NEXT</button></a>
    {% endif %}
  </div>
</div>
