<!--
 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. See accompanying LICENSE file.
-->

<li><span class="section-nav-list-main-title">Community</span></li>
<li><a href="{{ site.baseurl }}/community/integrations">Integrations</a></li>
<li><a href="{{ site.baseurl }}/community/contact-us">Contact Us</a></li>
<li><a href="{{ site.baseurl }}/community/policies">Policies</a></li>
<li><a href="{{ site.baseurl }}/community/youtube-channel">YouTube channel</a></li>
<li><a href="{{ site.baseurl }}/community/twitter-handle">Twitter Handle</a></li>
<li><a href="{{ site.baseurl }}/community/in-person">In Person</a></li>
<li>
  <span class="section-nav-list-title">Promotion</span>

  <ul class="section-nav-list">
    <li><a href="{{ site.baseurl }}/community/presentation-materials/">Presentation materials</a></li>
    <li><a href="{{ site.baseurl }}/community/logos/">Logos</a></li>
  </ul>
</li>
<li><a href="https://projects.apache.org/committee.html?beam" target="_blank">Team <img src="{{ site.baseurl }}/images/external-link-icon.png"
                                                                                            width="14" height="14"
                                                                                            alt="External link to Beam roster">
	</a></li>
