Apache Accumulo
Copyright 2011-2016 The Apache Software Foundation

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

This product includes the following work from the Apache Thrift project:

TNonblockingServerSocket.java

Apache Thrift
Copyright 2006-2010 The Apache Software Foundation.
