End User License Agreement for QuickPage Software

GRANT.

     Subject to the provisions contained herein, Qpage Solutions ("Author")
     hereby grants you a non-exclusive license to use its accompanying
     proprietary software product and associated documentation ("Software")
     free of charge pursuant to the terms and conditions of this Agreement.
     You are not entitled to support or telephone assistance in connection
     with your use of the Software.

SOFTWARE AND DOCUMENTATION.

     The Author shall furnish the Software to you electronically in source
     code form. This license does not grant you any right to any enhancement
     or update to the Software and Documentation.

USE RESTRICTIONS.

     You may use, copy, and modify the Software in source code or object
     code form, subject to the following conditions:

	o If the Software is modified, any Software containing
	  modifications must prominently state in the modified product
	  or documentation (i) that it has been modified, (ii) the
	  identity of the person or entity that made the modifications,
	  and (iii) the date the modifications were made.

	o Each copy of the Software made by you shall be subject to the
	  terms of this Agreement and shall contain all of the Author's
	  notices regarding copyrights, trademarks and other proprietary
	  rights as contained in the Software originally provided to you.

	o The Software may not be transferred to any third party unless
	  such third party receives a copy of this Agreement and agrees
	  to be bound by all of its terms and conditions.

	o The Software or any modifications or derivations thereof may
	  not be transferred to any third party under any other license
	  agreement without prior written permission from the Author.

TITLE.

     Title, ownership rights, and intellectual property rights in and to
     the Software shall remain with the Author.  The Software is protected
     by the copyright laws of the United States and international copyright
     treaties.

CONTENT.

     Title, ownership rights, and intellectual property rights in and to
     the content accessed through the Software is the property of the
     applicable content owner and may be protected by applicable copyright
     or other law.  This License gives you no rights to such content.

DISCLAIMER OF WARRANTY.

     Since the Software is provided free of charge, the Software is
     provided on an "AS IS" basis, without warranty of any kind, including
     without limitation the warranties of merchantability, fitness for a
     particular purpose and non-infringement. The entire risk as to the
     quality and performance of the Software is borne by you. Should the
     Software prove defective, you, and not the Author assume the entire
     cost of any service and repair. This disclaimer of warranty constitutes
     an essential part of the agreement.

LIMITATION OF LIABILITY.

     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, OR
     OTHERWISE, SHALL QPAGE SOLUTIONS OR ITS SUPPLIERS RESELLERS, OR
     LICENSEES BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY DIRECT,
     INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
     STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
     COMMERCIAL DAMAGES OR LOSSES, EVEN IF QPAGE SOLUTIONS SHALL HAVE BEEN
     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY
     OTHER PARTY.

EXPORT CONTROLS.

     You may not download or otherwise export or reexport the Software or
     any underlying information or technology except in full compliance
     with all United States and other applicable laws and regulations. By
     downloading or using the Software, you are agreeing to the foregoing.

TERMINATION.

     This Agreement shall automatically terminate upon failure by you to
     comply with its terms, in which case you shall immediately discontinue
     the use of the Software and shall within ten (10) days return to the
     Author or destroy all copies of the Software.  You may also terminate
     this Agreement at any time by destroying the Software and all copies
     thereof.

MISCELLANEOUS.

     This Agreement represents the complete and exclusive statement of the
     agreements concerning this license between the parties. It may be
     amended only by a writing executed by both parties. If any provision
     of this Agreement is held to be unenforceable for any reason, such
     provision shall be reformed only to the extent necessary to make it
     enforceable, and such decision shall not affect the enforceability (i)
     of such provision under other circumstances or (ii) of the remaining
     provisions hereof under all circumstances. Headings shall not be
     considered in interpreting this Agreement. This Agreement shall be
     governed by and construed under the laws of the State of California,
     except as governed by Federal law. This Agreement will not be governed
     by the United Nations Convention of Contracts for the International
     Sale of Goods, the application of which is hereby expressly excluded.
