  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.


  This is excludes file for Apache RAT tool run by ASF Buildbot,
  http://creadur.apache.org/rat/

  The following files are excluded:

  - log files and other temporary files generated during testing

  - *.html files in documentation are generated from XML sources

  - *.md5, *.sha/*.sha1 files are generated and cannot contain license

  - *.manifest, MANIFEST.MF JAR manifest files cannot contain license

  - package-list files in API documentation (javadoc) are generated

  - other test files, such as trivial textual files containing only "OK' string
    or compressed files are also excluded.

  - JSON files (RFC7159) are data and cannot contain comments

  - local build configuration files

  - file fragments that are combined during the build process and therefore can
    not contain a license header in every fragment

  - Checkstyle configuration file that defines how to check for the presence of
    ALv2 headers

  - files used simply to ensure directories are not empty

  - *.bmp, *.dia files are binary
    (*.gif, *.jpg are also binary, but are automatically detected by RAT as
    ones, so no explicit configuration is needed)

  - unused modules

output/build/logs/*
output/test-tmp/**

output/build/webapps/docs/**/*.html
output/dist/webapps/docs/**/*.html
output/deployer/deployer-howto.html

**/*.md5
**/*.sha1

**/MANIFEST.MF
**/*.manifest

output/dist/webapps/docs/*/package-list

output/dist/src/test/webapp/index.html.br
output/dist/src/test/webapp/bug53257/*.txt
output/dist/src/test/webapp-fragments/WEB-INF/classes/*.txt
test/webapp/index.html.br
test/webapp/bug53257/*.txt
test/webapp-fragments/WEB-INF/classes/*.txt

**/*.json

build.properties

output/dist/confinstall/tomcat-users_2.xml
output/dist/src/res/confinstall/tomcat-users_2.xml
res/confinstall/tomcat-users_2.xml

output/dist/src/res/checkstyle/header-al2.txt
res/checkstyle/header-al2.txt

output/dist/temp/safeToDelete.tmp

**/*.bmp
**/*.dia

modules/tomcat-lite/**
