---
layout: nil
---
<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.
-->
<urlset
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>
    <loc>http://samza.apache.org/</loc>
    <lastmod>{{ site.time | date: "%Y-%m-%d" }}</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>

  {% for post in site.posts %}
  <url>
    <loc>http://samza.apache.org{{ post.url }}/</loc>
    <lastmod>{{ post.date | date: "%Y-%m-%d" }}</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.2</priority>
  </url>
  {% endfor %}

  {% for page in site.html_pages %}
  <url>
    <loc>http://samza.apache.org{{ page.url }}</loc>
    <lastmod>{{ site.time | date: "%Y-%m-%d" }}</lastmod>
    {% if page.changefreq %}<changefreq>{{ page.changefreq }}</changefreq>{% endif %}
    {% if page.priority %}<priority>{{ page.priority }}</priority>{% endif %}
  </url>
  {% endfor %}
</urlset>
