ADOBE SYSTEMS INCORPORATED
End User License Agreement
Please return any accompanying registration form to receive registration
benefits.
NOTICE TO USER:  PLEASE READ THIS CONTRACT CAREFULLY.  BY USING ALL OR ANY
PORTION OF THE SOFTWARE YOU ACCEPT ALL THE TERMS AND CONDITIONS OF THIS
AGREEMENT, INCLUDING, IN PARTICULAR THE LIMITATIONS ON: USE CONTAINED IN
SECTION 2; TRANSFERABILITY IN SECTION 4; WARRANTY IN SECTION 6 AND 7; AND
LIABILITY IN SECTION 8. YOU AGREE THAT THIS AGREEMENT IS ENFORCEABLE LIKE ANY
WRITTEN NEGOTIATED AGREEMENT SIGNED BY YOU.  IF YOU DO NOT AGREE, DO NOT USE
THIS SOFTWARE.  IF YOU ACQUIRED THE SOFTWARE ON TANGIBLE MEDIA (e.g. CD)
WITHOUT AN OPPORTUNITY TO REVIEW THIS LICENSE AND YOU DO NOT ACCEPT THIS
AGREEMENT, YOU MAY OBTAIN A REFUND OF THE AMOUNT YOU ORIGINALLY PAID IF YOU:
(A) DO NOT USE THE SOFTWARE AND (B) RETURN IT, WITH PROOF OF PAYMENT, TO THE
LOCATION FROM WHICH IT WAS OBTAINED WITHIN THIRTY (30) DAYS OF THE PURCHASE
DATE.


1.  Definitions.  "Software" means (a) all of the contents of the files,
disk(s), CD-ROM(s) or other media with which this Agreement is provided,
including but not limited to (i) Adobe or third party computer information or
software; (ii) digital images, stock photographs, clip art, sounds or other
artistic works ("Stock Files"); (iii) related explanatory written materials or
files ("Documentation"); and (iv) fonts; and (b) upgrades, modified versions,
updates, additions, and copies of the Software, if any, licensed to you by
Adobe (collectively, "Updates").  "Use" or "Using" means to access, install,
download, copy or otherwise benefit from using the functionality of the
Software in accordance with the Documentation.  "Permitted Number" means one
(1) unless otherwise indicated under a valid license (e.g. volume license)
granted by Adobe.  "Computer" means an electronic device that accepts
information in digital or similar form and manipulates it for a specific result
based on a sequence of instructions.  "Adobe" means Adobe Systems Incorporated,
a Delaware corporation, 345 Park Avenue, San Jose, California 95110, if
subsection 10(a) of this Agreement applies; otherwise it means Adobe Systems
Benelux BV, Europlaza, Hoogoorddreef 54a, 1101 BE Amsterdam ZO, the
Netherlands, a company organized under the laws of the Netherlands and an
affiliate and licensee of Adobe Systems Incorporated.


2. Software License.  As long as you comply with the terms of this End User
License Agreement (the "Agreement"), Adobe grants to you a non-exclusive
license to Use the Software for the purposes described in the Documentation.
Some third party materials included in the Software may be subject to other
terms and conditions, which are typically found in a "Read Me" file located
near such materials.
2.1.  General Use.  You may install and Use a copy of the Software on your
compatible computer, up to the Permitted Number of computers; or
2.2.  Server Use.  You may install one copy of the Software on your computer
file server for the purpose of downloading and installing the Software onto
other computers within your internal network up to the Permitted Number or you
may install one copy of the Software on a computer file server within your
internal network for the sole and exclusive purpose of using the Software
through commands, data or instructions (e.g. scripts) from an unlimited number
of computers on your internal network.  No other network use is permitted,
including but not limited to, using the Software either directly or through
commands, data or instructions from or to a computer not part of your internal
network, for internet or web hosting services or by any user not licensed to
use this copy of the Software through a valid license from Adobe; and
2.3.  Backup Copy.  You may make one backup copy of the Software, provided your
backup copy is not installed or used on any computer. You may not transfer the
rights to a backup copy unless you transfer all rights in the Software as
provided under Section 4.
2.4.  Home Use.  You, as the primary user of the computer on which the Software
is installed, may also install the Software on one of your home computers.
However, the Software may not be used on your home computer at the same time
the Software on the primary computer is being used.
2.5.  Stock Files.  Unless stated otherwise in the "Read-Me" files associated
with the Stock Files, which may include specific rights and restrictions with
respect to such materials, you may display, modify, reproduce and distribute
any of the Stock Files included with the Software.  However, you may not
distribute the Stock Files on a stand-alone basis, i.e., in circumstances in
which the Stock Files constitute the primary value of the product being
distributed.  Stock Files may not be used in the production of libelous,
defamatory, fraudulent, lewd, obscene or pornographic material or any material
that infringes upon  any third party intellectual property rights or in any
otherwise illegal manner.  You may not claim any trademark rights in the Stock
Files or derivative works thereof.
2.6. Font Software. If the Software includes font software -
2.6.1. You may Use the font software as described above on the Permitted Number
of computers and output such font software on any output devices connected to
such computers.
2.6.2. If the Permitted Number of computers is five or fewer, you may download
the font software to the memory (hard disk or RAM) of one output device
connected to at least one of such computers for the purpose of having such font
software remain resident in the output device, and of one additional such
output device for every multiple of five represented by the Permitted Number of
computers.
2.6.3. You may take a copy of the font(s) you have used for a particular file
to a commercial printer or other service bureau, and such service bureau may
Use the font(s) to process your file, provided such service bureau has a valid
license to Use that particular font software.
2.6.4. You may convert and install the font software into another format for
use in other environments, subject to the following conditions: A computer on
which the converted font software is used or installed shall be considered as
one of your Permitted Number of computers. Use of the font software you have
converted shall be pursuant to all the terms and conditions of this Agreement.
Such converted font software may be used only for your own customary internal
business or personal use and may not be distributed or transferred for any
purpose, except in accordance with the Transfer section below.
2.6.5 You may embed the font software, or outlines of the font software, into
your electronic documents to the extent that the font vendor copyright owner
allows for such embedding. The fonts contained in this package may contain both
Adobe and non-Adobe owned fonts. You may fully embed any font owned by Adobe.
Refer to the font sample sheet or font information file to determine font
ownership. See the Documentation for location and information on how to access
these sheets and files.
2.7  To the extent that the Software includes Adobe Acrobat Reader software,
(i) you may customize the installer for such software in accordance with the
restrictions found at www.adobe.com (e.g., installation of additional plug-in
and help files); however, you may not otherwise alter or modify the installer
program or create a new installer for any of such software, (ii) such software
is licensed and distributed by Adobe for viewing, distributing and sharing PDF
files, and (iii) you are not authorized to use any plug-in or enhancement that
permits you to save modifications to a PDF file with such software; however,
such use is authorized with Adobe Acrobat, Adobe Acrobat Business Tools, and
other current and future Adobe products that feature the creation or
manipulation of PDF files.  For information on how to distribute Adobe Acrobat(
Reader( and Adobe SVG Viewer please refer to the sections entitled "How to
Distribute Acrobat Reader" and "How to Distribute SVG Viewer" at www.adobe.com.



3. Intellectual Property Rights. The Software and any copies that you are
authorized by Adobe to make are the intellectual property of and are owned by
Adobe Systems Incorporated and its suppliers. The structure, organization and
code of the Software are the valuable trade secrets and confidential
information of Adobe Systems Incorporated and its suppliers. The Software is
protected by copyright, including without limitation by United States Copyright
Law, international treaty provisions and applicable laws in the country in
which it is being used. You may not copy the Software, except as set forth in
Section 2 ("Software License"). Any copies that you are permitted to make
pursuant to this Agreement must contain the same copyright and other
proprietary notices that appear on or in the Software. Except for font software
converted to other formats as permitted in section 2.6.4, you agree not to
modify, adapt or translate the Software.You also agree not to reverse engineer,
decompile, disassemble or otherwise attempt to discover the source code of the
Software except to the extent you may be expressly permitted to decompile under
applicable law, it is essential to do so in order to achieve operability of the
Software with another software program, and you have first requested Adobe to
provide the information necessary to achieve such operability and Adobe has not
made such information available. Adobe has the right to impose reasonable
conditions and to request a reasonable fee before providing such information.
Any information supplied by Adobe or obtained by you, as permitted hereunder,
may only be used by you for the purpose described herein and may not be
disclosed to any third party or used to create any software which is
substantially similar to the expression of the Software. Requests for
information should be directed to the Adobe Customer Support Department.
Trademarks shall be used in accordance with accepted trademark practice,
including identification of trademarks owners' names. Trademarks can only be
used to identify printed output produced by the Software and such use of any
trademark does not give you any rights of ownership in that trademark. Except
as expressly stated above, this Agreement does not grant you any intellectual
property rights in the Software.


4. Transfer. You may not, rent, lease, sublicense or authorize all or any
portion of the Software to be copied onto another users computer except as may
be expressly permitted herein. You may, however, transfer all your rights to
Use the Software to another person or legal entity provided that: (a) you also
transfer each this Agreement, the Software and all other software or hardware
bundled or pre-installed with the Software, including all copies, Updates and
prior versions, and all copies of font software converted into other formats,
to such person or entity;  (b) you retain no copies, including backups and
copies stored on a computer; and (c) the receiving party accepts the terms and
conditions of this Agreement and any other terms and conditions upon which you
legally purchased a license to the Software. Notwithstanding the foregoing, you
may not transfer education, pre-release, or not for resale copies of the
Software.


5. Multiple Environment Software / Multiple Language Software / Dual Media
Software / Multiple Copies/ Bundles / Updates. If the Software supports
multiple platforms or languages, if you receive the Software on multiple media,
if you otherwise receive multiple copies of the Software, or if you received
the Software bundled with other software, the total number of your computers on
which all versions of the Software are installed may not exceed the Permitted
Number. You may not, rent, lease, sublicense, lend or transfer any versions or
copies of such Software you do not Use. If the Software is an Update to a
previous version of the Software, you must possess a valid license to such
previous version in order to Use the Update.  You may continue to Use the
previous version of the Software on your computer after you receive the Update
to assist you in the transition to the Update, provided that: the Update and
the previous version are installed on the same computer; the previous version
or copies thereof are not transferred to another party or computer unless all
copies of the Update are also transferred to such party or computer; and you
acknowledge that any obligation Adobe may have to support the previous version
of the Software may be ended upon availability of the Update.


6.  NO WARRANTY.  The Software is being delivered to you "AS IS" and Adobe
makes no warranty as to its use or performance.  ADOBE AND ITS SUPPLIERS DO NOT
AND CANNOT WARRANT THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING THE
SOFTWARE.  EXCEPT FOR ANY WARRANTY, CONDITION, REPRESENTATION OR TERM TO THE
EXTENT TO WHICH THE SAME CANNOT OR MAY NOT BE EXCLUDED OR LIMITED BY LAW
APPLICABLE TO YOU IN YOUR JURISDICTION, ADOBE AND ITS SUPPLIERS MAKE NO
WARRANTIES CONDITIONS, REPRESENTATIONS, OR TERMS (EXPRESS OR IMPLIED WHETHER BY
STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE) AS TO ANY MATTER INCLUDING
WITHOUT LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY,
INTEGRATION, SATISFACTORY QUALITY, OR FITNESS FOR ANY PARTICULAR PURPOSE.


7.  Pre-release Product Additional Terms.  If the product you have received
with this license is pre-commercial release or beta Software ("Pre-release
Software"), then the following Section applies.  To the extent that any
provision in this Section is in conflict with any other term or condition in
this Agreement, this Section shall supercede such other term(s) and
condition(s) with respect to the Pre-release Software, but only to the extent
necessary to resolve the conflict. You acknowledge that the Software is a
pre-release version, does not represent final product from Adobe, and may
contain bugs, errors and other problems that could cause system or other
failures and data loss. Consequently, the Pre-release Software is provided to
you "AS-IS", and Adobe disclaims any warranty or liability obligations to you
of any kind. WHERE LEGALLY LIABILITY CANNOT BE EXCLUDED FOR PRE-RELEASE
SOFTWARE, BUT IT MAY BE LIMITED, ADOBE'S LIABILITY AND THAT OF ITS SUPPLIERS
SHALL BE LIMITED TO THE SUM OF FIFTY DOLLARS (U.S. $50) IN TOTAL. You
acknowledge that Adobe has not promised or guaranteed to you that Pre-release
Software will be announced or made available to anyone in the future, that
Adobe has no express or implied obligation to you to announce or introduce the
Pre-release Software and that Adobe may not introduce a product similar to or
compatible with the Pre-release Software. Accordingly, you acknowledge that any
research or development that you perform regarding the Pre-release Software or
any product associated with the Pre-release Software is done entirely at your
own risk. During the term of this Agreement, if requested by Adobe, you will
provide feedback to Adobe regarding testing and use of the Pre-release
Software, including error or bug reports. If you have been provided the
Pre-release Software pursuant to a separate written agreement, such as the
Adobe Systems Incorporated Serial Agreement for Unreleased Products, your use
of the Software is also governed by such agreement. You agree that you may not
and certify that you will not sublicense, lease, loan, rent, or transfer the
Pre-release Software. Upon receipt of a later unreleased version of the
Pre-release Software or release by Adobe of a publicly released commercial
version of the Software, whether as a stand-alone product or as part of a
larger product, you agree to return or destroy all earlier Pre-release Software
received from Adobe and to abide by the terms of the End User License Agreement
for any such later versions of the Pre-release Software. Notwithstanding
anything in this Section to the contrary, if you are located outside the United
States of America, you agree that you will return or destroy all unreleased
versions of the Pre-release Software within thirty (30) days of the completion
of your testing of the Software when such date is earlier than the date for
Adobe's first commercial shipment of the publicly released (commercial)
Software.


8. LIMITATION OF LIABILITY. IN NO EVENT WILL ADOBE OR ITS SUPPLIERS BE LIABLE
TO YOU FOR ANY DAMAGES, CLAIMS OR COSTS WHATSOEVER OR ANY CONSEQUENTIAL,
INDIRECT, INCIDENTAL DAMAGES, OR ANY LOST PROFITS OR LOST SAVINGS, EVEN IF AN
ADOBE REPRESENTATIVE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, DAMAGES,
CLAIMS OR COSTS OR FOR ANY CLAIM BY ANY THIRD PARTY.  THE FOREGOING LIMITATIONS
AND EXCLUSIONS APPLY TO THE EXTENT PERMITTED BY APPLICABLE LAW IN YOUR
JURISDICTION.  ADOBE'S AGGREGATE  LIABILITY AND THAT OF ITS SUPPLIERS  UNDER OR
IN CONNECTION WITH THIS AGREEMENT SHALL BE LIMITED TO THE AMOUNT PAID FOR THE
SOFTWARE, IF ANY. Nothing contained in this Agreement limits Adobe's liability
to you in the event of death or personal injury resulting from Adobe's
negligence or for the tort of deceit (fraud). Adobe is acting on behalf of its
suppliers for the purpose of disclaiming, excluding and/or limiting
obligations, warranties and liability as provided in this Agreement, but in no
other respects and for no other purpose. For further information, please see
the jurisdiction specific information at the end of this Agreement, if any, or
contact Adobe's Customer Support Department.


9. Export Rules. You agree that the Software will not be shipped, transferred
or exported into any country or used in any manner prohibited by the United
States Export Administration Act or any other export laws, restrictions or
regulations (collectively the "Export Laws"). In addition, if the Software is
identified as export controlled items under the Export Laws, you represent and
warrant that you are not a citizen, or otherwise located within, an embargoed
nation (including without limitation Iran, Iraq, Syria, Sudan, Libya, Cuba,
North Korea, and Serbia) and that you are not otherwise prohibited under the
Export Laws from receiving the Software.   All rights to Use the Software are
granted on condition that such rights are forfeited if you fail to comply with
the terms of this Agreement.


10. Governing Law. This Agreement will be governed by and construed in
accordance with the substantive laws in force: (a) in the State of California,
if a license to the Software is purchased when you are in the United States,
Canada, or Mexico; or (b) in Japan, if a license to the Software is purchased
when you are in Japan, China, Korea, or other Southeast Asian country where all
official languages are written in either an ideographic script (e.g., hanzi,
kanji, or hanja), and/or other script based upon or similar in structure to an
ideographic script, such as hangul or kana; or (c) the Netherlands, if a
license to the Software is purchased when you are in any other jurisdiction not
described above. The respective courts of Santa Clara County, California when
California law applies, Tokyo District Court in Japan, when Japanese law
applies, and the courts of Amsterdam, the Netherlands, when the law of the
Netherlands applies, shall each have non-exclusive jurisdiction over all
disputes relating to this Agreement. This Agreement will not be governed by the
conflict of law rules of any jurisdiction or the United Nations Convention on
Contracts for the International Sale of Goods, the application of which is
expressly excluded.


11. General Provisions. If any part of this Agreement is found void and
unenforceable, it will not affect the validity of the balance of the Agreement,
which shall remain valid and enforceable according to its terms.  This
Agreement shall not prejudice the statutory rights of any party dealing as a
consumer. This Agreement may only be modified by a writing signed by an
authorized officer of Adobe. Updates may be licensed to you by Adobe with
additional or different terms. This is the entire agreement between Adobe and
you relating to the Software and it supersedes any prior representations,
discussions, undertakings, communications or advertising relating to the
Software.


12. Notice to U.S. Government End Users. The Software and Documentation are
"Commercial Items," as that term is defined at 48 C.F.R. §2.101, consisting of
"Commercial Computer Software" and "Commercial Computer Software
Documentation," as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R.
§227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R.
§§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer
Software and Commercial Computer Software Documentation are being licensed to
U.S. Government end users (a) only as Commercial Items and (b) with only those
rights as are granted to all other end users pursuant to the terms and
conditions herein. Unpublished-rights reserved under the copyright laws of the
United States. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA
95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all
applicable equal opportunity laws including, if appropriate, the provisions of
Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans
Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the
Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts
60-1 through 60-60, 60-250, and 60-741.  The affirmative action clause and
regulations contained in the preceding sentence shall be incorporated by
reference in this Agreement.


13. Compliance with Licenses. If you are a business or organization, you agree
that upon request from Adobe or Adobe's authorised representative, you will
within thirty (30) days fully document and certify that use of any and all
Adobe Software at the time of the request is in conformity with your valid
licenses from Adobe.


If you have any questions regarding this Agreement or if you wish to request
any information from Adobe please use the address and contact information
included with this product to contact the Adobe office serving your
jurisdiction.


Adobe, Acrobat, Acrobat Reader, and After Effects are either registered
trademarks or trademarks of Adobe Systems Incorporated in the United States
and/or other countries.




SVGReader_WWEULA_English_08.09.01_11:15
