<?xml version="1.0"?>

<!--
   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.
-->

<FindBugsFilter>
  <Match>
    <Bug pattern="DM_DEFAULT_ENCODING"/>
  </Match>
  <Match>
    <Bug pattern="DM_EXIT"/>
  </Match>
  <Match>
    <Bug pattern="EI_EXPOSE_REP"/>
  </Match>
  <Match>
    <Bug pattern="EI_EXPOSE_REP2"/>
  </Match>
  <Match>
    <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
  </Match>
  <Match>
    <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
  </Match>
  <Match>
    <Bug pattern="NS_DANGEROUS_NON_SHORT_CIRCUIT"/>
  </Match>
  <Match>
    <Bug pattern="RV_ABSOLUTE_VALUE_OF_HASHCODE"/>
  </Match>
  <Match>
    <Bug pattern="RV_ABSOLUTE_VALUE_OF_RANDOM_INT"/>
  </Match>
  <Match>
    <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
  </Match>
  <Match>
    <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE"/>
  </Match>
  <Match>
    <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
  </Match>
  <Match>
    <Bug pattern="UUF_UNUSED_FIELD"/>
  </Match>
  <Match>
    <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
  </Match>
</FindBugsFilter>
