Pony Mail
Copyright 2015 The Apache Software Foundation.

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

This product includes code (stylesheets/javascript) developed 
by Twitter, inc. (BootStrap), Licensed under MIT license

This product includes code (JS regex def) developed 
by Diego Perini, licensed under MIT license (webURL)

This product includes code developed by the jQuery
Foundation, licensed under MIT license.

