Apache Geode
Copyright 2016-2022 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).


The following NOTICEs pertain to software distributed with this project.

stream-lib
Copyright 2016 AddThis

   This product includes software developed by AddThis.

   This product also includes code adapted from:

   Apache Solr (http://lucene.apache.org/solr/)
   Copyright 2014 The Apache Software Foundation

This product includes software developed by the MX4J
project (http://mx4j.sourceforge.net).

striped-executor-service
Copyright 2000-2012 Heinz Max Kabutz
From The Java Specialists' Newsletter (http://www.javaspecialists.eu)
