Apple Computer, Inc. Software License

PLEASE READ THIS SOFTWARE LICENSE AGREEMENT "LICENSE" CAREFULLY BEFORE
DOWNLOADING THIS SOFTWARE. BY DOWNLOADING THIS SOFTWARE YOU ARE
AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE.  IF YOU DO NOT
AGREE TO THE TERMS OF THIS LICENSE, DO NOT DOWNLOAD.

1. License.  The software, documentation and any fonts which you will
receive by downloading this software (the "Apple Software") are
licensed, not sold, to you by Apple Computer, Inc. or its local
subsidiary, if any.  Apple and/or Apple's licensor(s) retain title to
the Apple Software, and the Apple Software and any copies which this
License authorizes you to make are subject to this License.  This
License grants no right or license under any trademarks, service
marks, or tradenames of Apple.

2. Permitted Uses and Restrictions.  This License allows you to copy,
install and use the Apple Software on an unlimited number of computers
under your direct control. You may modify and create derivative works
of the Apple Software ("Modified Software"), however, you may not
modify or create derivative works of the fonts provided by Apple
("Fonts").  You may distribute and sublicense such Modified Software
only under the terms of a valid, binding license that makes no
representations or warranties on behalf of Apple, and is no less
protective of Apple and Apple's rights than this License.  You may
distribute and sublicense the Fonts only as a part of and for use with
Modified Software, and not as a part of or for use with Modified
Software that is distributed or sublicensed for a fee or for other
valuable consideration.  If the Modified Software contains
modifications, overwrites, replacements, deletions, additions, or
ports to new platforms of: (1) the methods of existing class objects
or their existing relationships, or (2) any part of the virtual
machine, then for so long as the Modified Software is distributed or
sublicensed to others, such modified, overwritten, replaced, deleted,
added and ported portions of the Modified Software must be made
publicly available, preferably by means of download from a website, at
no charge under the terms set forth in Exhibit A below.  You may
transfer your rights under this License provided you transfer this
License and a copy of the Apple Software to a party who agrees to
accept the terms of this License and destroy any other copies of the
Apple Software in your possession.  Your rights under this License
will terminate automatically without notice from Apple if you fail to
comply with any term(s) of this License.

3. Disclaimer Of Warranty.  The Apple Software is pre-release, and
untested, or not fully tested.  The Apple Software may contain errors
that could cause failures or loss of data, and may be incomplete or
contain inaccuracies.  You expressly acknowledge and agree that use of
the Apple Software is at your sole risk.  You acknowledge that Apple
has not publicly announced, nor promised or guaranteed to you, that
Apple will release a final, commercial or any future pre-release
version of the Apple Software to you or anyone in the future, and that
Apple has no express or implied obligation to announce or introduce a
final, commercial or any future pre-release version of the Apple
Software or any similar or compatible product, or to continue to offer
or support the Apple Software in the future.  The Apple Software is
provided "AS-IS" and without warranty of any kind and Apple and
Apple's licensor(s) (for the purposes of Sections 3 and 4, Apple and
Apple's licensor(s) shall be collectively referred to as "Apple")
EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR
CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND FITNESS FOR
A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  APPLE
DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE
WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE APPLE
SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE
APPLE SOFTWARE WILL BE CORRECTED.  FURTHERMORE, APPLE DOES NOT WARRANT
OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE
USE OF THE APPLE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR
CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE.  NO ORAL OR WRITTEN
INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED
REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE
SCOPE OF THIS WARRANTY.  SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE,
YOU (AND NOT APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE) ASSUME THE
ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  SOME
JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE
ABOVE EXCLUSION MAY NOT APPLY TO YOU.  THE TERMS OF THIS DISCLAIMER DO
NOT AFFECT OR PREJUDICE THE STATUTORY RIGHTS OF A CONSUMER ACQUIRING
APPLE PRODUCTS OTHERWISE THAN IN THE COURSE OF A BUSINESS, NEITHER DO
THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH OR PERSONAL INJURY
CAUSED BY APPLE'S NEGLIGENCE.

4. Limitation of Liability.  UNDER NO CIRCUMSTANCES, INCLUDING
NEGLIGENCE, SHALL APPLE BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS
LICENSE.  SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL
OR CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU.  In
no event shall Apple's total liability to you for all damages exceed
the amount of fifty dollars ($50.00).

5. Indemnification.  You agree to indemnify and hold Apple harmless
from any and all damages, liabilities, costs and expenses (including
but not limited to attorneys' fees and costs of suit) incurred by
Apple as a result of any claim, proceeding, and/or judgment to the
extent it arises out of or is connected in any manner with the
operation, use, distribution or modification of Modified Software, or
the combination of Apple Software or Modified Software with other
programs; provided that Apple notifies Licensee of any such claim or
proceeding in writing, tenders to Licensee the opportunity to defend
or settle such claim or proceeding at Licensee's expense, and
cooperates with Licensee in defending or settling such claim or
proceeding.

6. Export Law Assurances.  You may not use or otherwise export or
reexport the Apple Software except as authorized by United States law
and the laws of the jurisdiction in which the Apple Software was
obtained.  In particular, but without limitation, the Apple Software
may not be exported or reexported (i) into (or to a national or
resident of) any U.S. embargoed country or (ii) to anyone on the
U.S. Treasury Department's list of Specially Designated Nationals or
the U.S. Department of Commerce's Table of Denial Orders.  By using
the Apple Software, you represent and warrant that you are not located
in, under control of, or a national or resident of any such country or
on any such list.

7. Government End Users.  If the Apple Software is supplied to the
United States Government, the Apple Software is classified as
"restricted computer software" as defined in clause 52.227-19 of the
FAR.  The United States Government's rights to the Apple Software are
as provided in clause 52.227-19 of the FAR.

8. Controlling Law and Severability.  If there is a local subsidiary
of Apple in the country in which the Apple Software License was
obtained, then the local law in which the subsidiary sits shall govern
this License.  Otherwise, this License shall be governed by the laws
of the United States and the State of California.  If for any reason a
court of competent jurisdiction finds any provision, or portion
thereof, to be unenforceable, the remainder of this License shall
continue in full force and effect.

9. Complete Agreement.  This License constitutes the entire agreement
between the parties with respect to the use of the Apple Software and
supersedes all prior or contemporaneous understandings regarding such
subject matter.  No amendment to or modification of this License will
be binding unless in writing and signed by Apple.

Where the Licensee is located in the province of Quebec, Canada, the
following clause applies: The parties hereto confirm that they have
requested that this Agreement and all related documents be drafted in
English.  Les parties ont exigé que le présent contrat et tous les
documents connexes soient rédigés en anglais.


EXHIBIT A

License.  You may copy, install, use, modify and create derivative
works of the [Modified Software] "Changed Software" (but you may not
modify or create derivative works of the [Fonts]) and distribute and
sublicense such Changed Software, provided however, that if the
Changed Software contains modifications, overwrites, replacements,
deletions, additions, or ports to new platforms of: (1) the methods of
existing classes objects or their existing relationships, or (2) any
part of the virtual machine, then for so long as the Changed Software
is distributed or sublicensed to others, such modified, overwritten,
replaced, deleted, added and ported portions of the Changed Software
must be made publicly available, preferably by means of download from
a website, at no charge under the terms of a license that makes no
representations or warranties on behalf of any third party, is no less
protective of [the licensors of the Modified Software] and its
licensors, and contains the terms set forth in Exhibit A below [which
should contain the terms of this Exhibit A].  You may distribute and
sublicense the [Fonts] only as a part of and for use with Changed
Software, and not as a part of or for use with Changed Software that
is distributed or sublicensed for a fee or for other valuable
consideration.
