Apache River Surrogate Container
Copyright 2009 The Apache Software Foundation

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

This product uses code generated by JavaCC tool (https://javacc.dev.java.net).