# List of files to exclude from RAT, see RAT_README for details
# this file
.rat-excludes*
# git files
.gitignore
.gitattributes
# test files
EXPECTED*
DIFF*
eqat*
qat*
.data*
sample_events*
FILTER*
lob_input*
romeo*
expected*
COMPARE*
expat*
regress*
regtest_*
montest_readme.txt
test-requirements.txt*
# protocol buffers
dtm*.*.pb.cc
protobuf*
# make
package.exclude.*
package.exclude
# readme files
readme*
README*
RAT_README
readme.md
README.md
run_me*
# documentation and build info
eclipse.*cproject*
eclipse.project
doxygen_tmudr.1.6.config
# Files needed by txn coprocesser - hbase
Hbase_server.skeleton.cpp*
__init__.py*
# SQL messages file
SqlciErrors.txt
# DCS config files
servers
masters
# jquery
jquery-ui.css*
jquery-ui.js*
jquery-ui.structure.css*
jquery-ui.theme.css*
jquery-1.11.0.js*
demo*.css*
Sortingicons.psd*
# licenses
license*.txt*
LICENSE.rtf*
lic-.*-src
lic-.*-bin
note-.*-bin
# win generated
odbc.vcxproj*
odbc.vcxproj.*
SetCertificateDirReg_os.vcxproj*
SetCertificateDirReg_os.vcxproj.*
SetCertificateDirReg_os.sln*
SetCertificateDirReg.rc*
odbccp32.props
UpdateDSN_os.sln
UpdateDSN*.vcxproj*
UpdateDSN*.vcxproj.*
UpdateDSN_os.vcxproj*
UpdateDSN_os.vcxproj.*
win64_installer_os.ism
odbcclient_os.sln
Drvr35*.rc*
Drvr35Res.rc
Drvr35Res.rc2
Drvr35*.vcxproj*
Drvr35*.vcxproj.*
Drvr35Adm_os.*
DrvMsg35.rc
Drvr35Res_os.rc*
Drvr35Msg_os.*
Drvr35Res_os.vcxproj*
Drvr35Res_os.vcxproj.*
drvr35*.rc*
drvr35*.vcxproj*
drvr35adm.*
TranslationDll.rc
TranslationDll*.vcxproj*
TranslationDll*.vcxproj.*
TranslationDll_os.vcxproj*
TranslationDll_os.vcxproj.*
drvr35.rc
drvr35*.vcxproj*
drvr35*.vcxproj.*
drvr35_os.rc
drvr35_os.vcxproj*
drvr35_os.vcxproj.*
openssl.props
version_drvr.cpp
TCPIPV4.*
TCPIPV6.*
TCPIPV4_os.*
TCPIPV6_os.*
.props*
.sln*
.ism*
resource.h*
resource.hm*
odb.sln
odb.vcxproj.*
odb.rc
swscanf.cpp
swsprintf.cpp
ulexer.h
# Compiler GUI files
usage.csv
Resource.qrc
#phoenix tests - MIT licensed from Salesforce
AlterTableTest.java
ArithmeticQueryTest.java
AutoCommitTest.java
BaseTest.java
BinaryRowKeyTest.java
CoalesceFunctionTest.java
CompareDecimalToLongTest.java
CreateTableTest.java
CustomEntityDataTest.java
DeleteRangeTest.java
DescColumnSortOrderTest.java
DistinctCountTest.java
ExecuteStatementsTest.java
ExtendedQueryExecTest.java
FunkyNamesTest.java
GroupByCaseTest.java
IndexTest.java
IsNullTest.java
KeyOnlyTest.java
MultiCfQueryExecTest.java
OrderByTest.java
ProductMetricsTest.java
QueryExecTest.java
QueryExecWithoutSCNTest.java
QueryPlanTest.java
ReadIsolationLevelTest.java
SaltedTableTest.java
SaltedTableUpsertSelectTest.java
SaltedTableVarLengthRowKeyTest.java
ServerExceptionTest.java
SkipScanQueryTest.java
StatementHintsTest.java
StddevTest.java
ToCharFunctionTest.java
ToNumberFunctionTest.java
TopNTest.java
UpsertBigValuesTest.java
UpsertSelectAutoCommitTest.java
UpsertSelectTest.java
UpsertValuesTest.java
VariableLengthPKTest.java
TrafConfiguration.java
# asciidoc extention file -- MIT license
google-analytics-postprocessor.rb

# pyinstaller JSON config files
mod_cfgs.json
prompt.json
script.json
version.json
# ambari configuration JSON files
mpack.json
role_command_order.json
theme.json
# pyinstaller dependencies
# they have BSD-3 license that RAT does not recognize
prettytable.py
socks.py

# SqlCompilerDebugger bmp
.*.bmp

# To be located
security_dll

