{#
  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.
-#}

We are kindly requesting that contributors to [{{link_text}}]({{link}}) help test the RC.

Please let us know by commenting if the issue is addressed in the latest RC.

{% for pr_number in pr_list %}
    {%- set pr = pull_requests[pr_number] -%}
- [ ] [{{ pr.title }} (#{{ pr.number }})]({{ pr.html_url }}): {{ user_logins[pr_number] }}
        {%- if linked_issues[pr_number] %}
     Linked issues:
            {%- for linked_issue in linked_issues[pr_number] %}
     - [{{ linked_issue.title }} (#{{ linked_issue.number }})]({{ linked_issue.html_url }})
            {%- endfor %}
        {%- endif %}
{% endfor %}

Thanks to all who contributed to the release (probably not a complete list!):
{{ all_user_logins }}
