LATTICE SEMICONDUCTOR CORPORATION
LatticeMico TM System License Agreement

This is a legal agreement between you, the end user, and Lattice Semiconductor 
Corporation.  By proceeding with the installation or use of the Software, you 
agree to be bound by the terms of this Agreement.  If you do not agree to the 
terms of this Agreement, do not use, download or install the Software, and if you 
have already obtained the Software from an authorized source, promptly return the 
media package and all accompanying items (including written materials and 
binders or other containers) to the place you obtained them for a full refund 
of any applicable license fees.

Lattice Semiconductor Corporation ("Lattice") and the individual or entity 
acquiring the Software ("Licensee") agree as follows:

1.  DEFINITIONS
"Software" means the LatticeMico System computer program(s) other than the 
open source programs identified in Section 11 herein in machine-readable form 
furnished to Licensee by Lattice, in whatever media and by whatever method, 
which are enabled for use pursuant to Lattice's software protection mechanism, 
and for which Licensee has paid any applicable license fees.  Software includes 
any related update or upgrade programs that may be added from time to time.

2.  SOFTWARE LICENSE
a.  Lattice hereby grants to Licensee a non-exclusive, nontransferable license 
to use the Software for Licensee's internal purposes only on any computer 
possessed by Licensee on which the Software is designed to operate, such use 
to be in accordance with and subject to the terms and conditions of this 
Agreement.

b.  Pursuant to this Agreement, Licensee may (i) physically transfer any 
Software from one computer to another provided that the Software is used on 
only one such computer at a time and (ii) use the Software and any output 
files generated by the Software for the sole purpose of designing and 
programming semiconductor components (the "Permitted Use") and (iii) make 
one (1) copy of the Software for Licensee's own use solely for backup or 
archive purposes.  Licensee may also merge the Software (or a portion thereof) 
into any other software to form an updated work; provided that, upon 
termination of Licensee's license, the Software shall be completely removed 
from the updated work and treated as if permission to merge had never been 
granted.  The use of any portion of the Software included in any such updated 
work remains at all times subject to the terms and conditions of this Agreement.

c.  Licensee shall include Lattice's (and Lattice's suppliers', as applicable) 
copyrights, trademarks, and other proprietary notices on any copies and merged 
versions of the Software.

d.  Licensee shall not distribute, copy, transfer, lend, incorporate, modify, 
or use the Software for any purpose except as expressly provided herein.

e.  If Licensee fails to comply with the provisions of this Agreement, the 
License is automatically terminated.

f.  Except for the rights expressly granted herein to Licensee, the title and 
all intellectual property rights in and to the Software and any copy of the 
Software which may be made by Licensee hereunder remain the sole and exclusive 
property of Lattice and/or Lattice's licensors.

3.  LIMITED WARRANTY AND REMEDIES
a.  Lattice warrants to Licensee that the media containing the Software will 
be free from defects in materials and workmanship under normal use and service 
for a period of ninety (90) days from the date of delivery.  Lattice further 
warrants that the Software will substantially conform to Lattice's published 
specifications for the Software at the time of delivery for a period of ninety 
(90) days from the date of delivery. 

b.  During the 90-day warranty period, (1) Lattice will replace any Software 
not meeting the foregoing warranty that is returned to Lattice; or (2) if 
Lattice is unable to deliver replacement Software which performs substantially 
in accordance with current program documentation or Software on a media which 
is free of defects in materials or workmanship, Licensee may terminate this 
Agreement by returning the Software and any applicable license fee paid by 
Licensee to Lattice will be refunded.  Any replacement Software or media will 
be warranted for the remainder of the original warranty period or thirty (30) 
days, whichever is longer.

c.  Any products which are not returned to Lattice within the warranty period 
or which have been subject to accident, abuse, misuse, alteration, neglect, or 
unauthorized repair or installation are not covered by warranty.

4.  WARRANTY DISCLAIMER
EXCEPT FOR THE ABOVE EXPRESSED LIMITED WARRANTIES, LATTICE MAKES NO WARRANTIES 
ON THE SOFTWARE, WHETHER EXPRESSED, IMPLIED, STATUTORY, OR IN ANY OTHER 
PROVISION OF THIS AGREEMENT OR COMMUNICATION WITH LICENSEE, AND LATTICE 
SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS 
FOR A PARTICULAR PURPOSE.  LATTICE DOES NOT WARRANT THAT THE OPERATION OF 
THE SOFTWARE BY LICENSEE WILL BE UNINTERRUPTED OR ERROR FREE.  LICENSEE 
ASSUMES RESPONSIBILITY FOR SELECTION OF THE SOFTWARE TO ACHIEVE ITS INTENDED 
RESULTS, AND FOR THE PROPER INSTALLATION, USE, AND RESULTS OBTAINED FROM THE 
SOFTWARE.  EXCEPT FOR THE ABOVE EXPRESSED LIMITED WARRANTIES, LICENSEE ASSUMES 
THE ENTIRE RISK OF THE SOFTWARE PROVING DEFECTIVE OR FAILING TO PERFORM 
PROPERLY AND IN SUCH EVENT, LICENSEE SHALL ASSUME THE ENTIRE COST AND RISK 
OF ANY REPAIR, SERVICE, CORRECTION, OR ANY OTHER LIABILITIES OR DAMAGES CAUSED 
BY OR ASSOCIATED WITH THE SOFTWARE.  LATTICE'S SOLE LIABILITY, AND LICENSEE'S 
SOLE REMEDY, IS SET FORTH ABOVE.

5.  SOURCE CODE
Licensee shall not attempt to reverse translate, decompile or otherwise 
attempt to derive the source code of the Software.  In the event any source 
code is explicitly licensed to Licensee as part of the Software, such 
limitation will not apply to such source code.  Licensee shall not alter or 
remove from the Software any copyright, trademark or other proprietary 
notices of Lattice and/or Lattice's licensors.  Any use or attempted use of 
the Software in violation of the foregoing restrictions is a breach of the 
Agreement which will cause irreparable harm to Lattice, entitling Lattice to 
injunctive relief in addition to all legal remedies.

6.  LIMITATION OF LIABILITY
a.  Licensee agrees that Lattice's entire liability to Licensee and Licensee's 
sole remedy hereunder for any cause whatsoever, regardless of the form of the 
action, shall be limited to the price paid to Lattice for the Software.

b.  IN NO EVENT WILL LATTICE OR ANY OF ITS SUPPLIERS BE LIABLE TO LICENSEE 
OR ANY OTHER PERSON FOR ANY DAMAGES, INCLUDING ANY DIRECT, INDIRECT, 
INCIDENTAL, CONSEQUENTIAL, OR SPECIAL DAMAGES, INCLUDING EXPENSES, LOST 
PROFITS, LOST SAVINGS, OR OTHER DAMAGES OF ANY SORT ARISING OUT OF THE USE 
OF OR INABILITY TO USE THE SOFTWARE, EVEN IF LATTICE HAS BEEN ADVISED OF THE 
POSSIBILITY OF SUCH DAMAGES.

SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF INCIDENTAL OR 
CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS OR EXCLUSIONS MAY NOT 
APPLY TO YOU.

7.  DEFAULT AND TERMINATION
This Agreement will continue indefinitely, until and unless terminated; it 
will terminate automatically in the event Licensee fails to perform any of 
its obligations hereunder.  Licensee may terminate this Agreement at any time 
by returning to Lattice the original and all copies of the Software or by 
destroying the Software together with all copies thereof, including all 
modifications and merged portions in any form.  Upon termination of this 
Agreement for any reason, Licensee shall either return to Lattice the original 
and all copies of the Software, or, upon Lattice's request, destroy such 
original and copies and provide Lattice with written certification of their 
destruction.

8.  EXPORT CONTROL
Licensee shall not export the Software or the direct product thereof without 
first obtaining any necessary U.S. or other governmental licenses and 
approvals.  In connection with such export control compliance, Licensee 
certifies as follows:
 - that Licensee is not on the Denied Persons List maintained by the U.S. 
Bureau of Industry and Security;

 - that Licensee is not on the list of Specially Designated Nationals and 
Blocked Persons maintained by the U.S. Department of the Treasury;
 - that Licensee is not a citizen or resident of, or an agent of, Cuba, Iran, 
Iraq, North Korea, Sudan, or Syria, or any other country to which 
export of the referenced Software is prohibited; and
 - that Licensee is legally permitted, under all applicable export and 
commerce control laws and regulations, to receive the referenced Software.

9.  U.S. GOVERNMENT RESTRICTED RIGHTS
The Software and any accompanying documentation provided to agencies of the 
U.S. Government are "commercial computer software" and "commercial computer 
software documentation" pursuant to DFARS 227.7202 and FAR 12.212, and their 
successors. All use, reproduction, release, performance, display or disclosure 
of the Software and related documentation by or for the U.S. Government shall 
be in strict accordance with the terms and conditions of this Agreement. 
Contractor/manufacturer is Lattice Semiconductor Corporation, 5555 NE Moore 
Court, Hillsboro, Oregon 97124 and its licensors.

10.  ADDITIONAL TERMS AND CONDITIONS APPLICABLE TO LATTICE PROGRAMMING HARDWARE
Lattice programmers, ispDOWNLOADTM cables, and other hardware sold for use in 
conjunction with Lattice software ("Programming Hardware") are designed and 
intended for use solely with semiconductor components manufactured by Lattice 
Semiconductor Corporation.  Programming Hardware is warranted to meet Lattice 
Specifications only for a period of ninety (90) days; in all other respects 
the terms and conditions of sale of Programming Hardware shall be Lattice's 
standard terms and conditions set forth in Lattice's Sales Order 
Acknowledgement.  Furthermore, Lattice Specifications for the ispDOWNLOAD 
cable limit its use to low-volume engineering applications only, and not for 
volume production use.  As with all other Programming Hardware, Lattice shall 
not be liable for any use of the ispDOWNLOAD cable in production, or use of 
worn or improperly installed hardware or use with incompatible systems or 
components.

11.  OPEN SOURCE SOFTWARE
a.  Your use of the Software is governed by the terms of this Agreement.  
However, certain separate source code modules identified in Section 11(b) 
and Section 11(c) below that are installed with, but not integrated with, the 
Software have been provided by third parties.  By proceeding with the 
installation and use of such open source code, you are also agreeing to use 
this code in accordance with the terms of the agreements under which such 
code has been licensed.  

b.  Certain open source code is licensed under the Eclipse Public License 
v. 1.0, a copy of which is attached hereto as Appendix A.

c.  Certain open source code is licensed pursuant to the terms of the notice 
attached hereto as Appendix B.

d.  Certain portion of the Software are licensed under the Mozilla Public License,
Version 1.1. pursuant to the terms of the notice attached hereto as Appendix C. 

12.  OPEN SOURCE LICENSE AGREEMENT FOR OUTPUT FILES GENERATED BY THE 
LATTICEMICO SYSTEM
By proceeding with the installation and use of the LatticeMico System, you 
are agreeing to use the output files generated by it in accordance with the 
terms of the Lattice Semiconductor Corporation Open Source License Agreement, 
a copy of which is attached hereto as Appendix D.

13.  INFORMATION REGARDING PERSONAL DATA
If you downloaded this Software from our website, we have collected 
information about you, including your name and contact information, from the 
information you provided when you registered to use the website.

If you acquired the Software from a source other than our website, we will ask 
you for certain information, including your name and contact information, as 
part of the installation procedure.

Some of our Software comes bundled with software from third party providers, 
including Aldec, Inc. and Synopsys, Inc. If you obtain a
license key from us for such Software, we will provide your name, corporate 
affiliation, address, phone number, fax number, and email address, along with 
information about the software version you have chosen, to the appropriate 
third party provider.

14.  GENERAL
THIS AGREEMENT WILL BE GOVERNED BY THE LAWS OF THE STATE OF OREGON, WITHOUT 
REGARD TO ITS CONFLICT OF LAWS PROVISIONS.

The prevailing party in any legal action or arbitration arising out of this 
Agreement shall be entitled to reimbursement for reasonable attorneys' fees 
and expenses, in addition to any other rights and remedies such party may have.

Lattice reserves the right in its sole discretion to discontinue third party 
software tools that come bundled with the Software at any time.

Licensee may not sublicense, assign, or transfer this license or the Software. 
Any attempted assignment, transfer or sublicense by Licensee in violation of 
this provision shall be void. Subject to the foregoing, this Agreement shall 
be binding upon and inure to the benefit of the successors and permitted 
assigns of the parties.

This Agreement is the entire agreement between the parties with respect to use 
of the Software and supersedes any other communications or prior agreements, 
oral or written, regarding the Software.  

If any provision of this Agreement is held invalid, the remainder of the 
Agreement shall continue in full force and effect.

Please direct all inquiries, in writing, to Lattice Semiconductor Corporation, 
5555 N.E. Moore Court, Hillsboro, Oregon 97124.

(c)2006-2011 Lattice Semiconductor Corporation.  All rights reserved.

Intellectual Property Notice

The software governed by this License Agreement is:

Copyright (c), 2006-2011, Lattice Semiconductor Corporation, All Rights Reserved



 
APPENDIX A

Eclipse Public License v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS 

"Contribution" means: 

a) in the case of the initial Contributor, the initial code and documentation 
distributed under this Agreement, and 

b) in the case of each subsequent Contributor: i) changes to the Program, and 
ii) additions to the Program; where such changes and/or additions to the 
Program originate from and are distributed by that particular Contributor. 
A Contribution 'originates' from a Contributor if it was added to the Program 
by such Contributor itself or anyone acting on such Contributor's behalf. 
Contributions do not include additions to the Program which: (i) are separate 
modules of software distributed in conjunction with the Program under their 
own license agreement, and (ii) are not derivative works of the Program. 

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents" mean patent claims licensable by a Contributor which are 
necessarily infringed by the use or sale of its Contribution alone or when 
combined with the Program. 

"Program" means the Contributions distributed in accordance with this 
Agreement.

"Recipient" means anyone who receives the Program under this Agreement, 
including all Contributors. 

2. GRANT OF RIGHTS 

a) Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free copyright license to 
reproduce, prepare derivative works of, publicly display, publicly perform, 
distribute and sublicense the Contribution of such Contributor, if any, and 
such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free patent license under 
Licensed Patents to make, use, sell, offer to sell, import and otherwise 
transfer the Contribution of such Contributor, if any, in source code and 
object code form. This patent license shall apply to the combination of the 
Contribution and the Program if, at the time the Contribution is added by the 
Contributor, such addition of the Contribution causes such combination to be 
covered by the Licensed Patents. The patent license shall not apply to any 
other combinations which include the Contribution. No hardware per se is 
licensed hereunder. 

c) Recipient understands that although each Contributor grants the licenses 
to its Contributions set forth herein, no assurances are provided by any 
Contributor that the Program does not infringe the patent or other 
intellectual property rights of any other entity. Each Contributor disclaims 
any liability to Recipient for claims brought by any other entity based on 
infringement of intellectual property rights or otherwise. As a condition to 
exercising the rights and licenses granted hereunder, each Recipient hereby 
assumes sole responsibility to secure any other intellectual property rights 
needed, if any. For example, if a third party patent license is required to 
allow Recipient to distribute the Program, it is Recipient's responsibility to 
acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient 
copyright rights in its Contribution, if any, to grant the copyright license 
set forth in this Agreement. 

3. REQUIREMENTS 

A Contributor may choose to distribute the Program in object code form under 
its own license agreement, provided that: 
a) it complies with the terms and conditions of this Agreement; and
b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties and 
conditions, express and implied, including warranties or conditions of title 
and non-infringement, and implied warranties or conditions of merchantability 
and fitness for a particular purpose; 
ii) effectively excludes on behalf of all Contributors all liability for 
damages, including direct, indirect, special, incidental and consequential 
damages, such as lost profits; 
iii) states that any provisions which differ from this Agreement are offered 
by that Contributor alone and not by any other party; and
iv) states that source code for the Program is available from such 
Contributor, and informs licensees how to obtain it in a reasonable manner 
on or through a medium customarily used for software exchange.
When the Program is made available in source code form:
a) it must be made available under this Agreement; and 
b) a copy of this Agreement must be included with each copy of the Program. 
Contributors may not remove or alter any copyright notices contained within 
the Program. 
Each Contributor must identify itself as the originator of its Contribution, 
if any, in a manner that reasonably allows subsequent Recipients to identify 
the originator of the Contribution. 

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with 
respect to end users, business partners and the like. While this license is 
intended to facilitate the commercial use of the Program, the Contributor 
who includes the Program in a commercial product offering should do so in a 
manner which does not create potential liability for other Contributors. 
Therefore, if a Contributor includes the Program in a commercial product 
offering, such Contributor ("Commercial Contributor") hereby agrees to defend 
and indemnify every other Contributor ("Indemnified Contributor") against any 
losses, damages and costs (collectively "Losses") arising from claims, 
lawsuits and other legal actions brought by a third party against the 
Indemnified Contributor to the extent caused by the acts or omissions of such 
Commercial Contributor in connection with its distribution of the Program in a 
commercial product offering. The obligations in this section do not apply to 
any claims or Losses relating to any actual or alleged intellectual property 
infringement. In order to qualify, an Indemnified Contributor must: a) 
promptly notify the Commercial Contributor in writing of such claim, and b) 
allow the Commercial Contributor to control, and cooperate with the Commercial 
Contributor in, the defense and any related settlement negotiations. The 
Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product 
offering, Product X. That Contributor is then a Commercial Contributor. If 
that Commercial Contributor then makes performance claims, or offers 
warranties related to Product X, those performance claims and warranties are 
such Commercial Contributor's responsibility alone. Under this section, the 
Commercial Contributor would have to defend claims against the other 
Contributors related to those performance claims and warranties, and if a 
court requires any other Contributor to pay any damages as a result, the 
Commercial Contributor must pay those damages. 

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON 
AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS 
OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF 
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 

Each Recipient is solely responsible for determining the appropriateness of 
using and distributing the Program and assumes all risks associated with its 
exercise of rights under this Agreement , including but not limited to the 
risks and costs of program errors, compliance with applicable laws, damage to 
or loss of data, programs or equipment, and unavailability or interruption of 
operations. 

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under 
applicable law, it shall not affect the validity or enforceability of the 
remainder of the terms of this Agreement, and without further action by the 
parties hereto, such provision shall be reformed to the minimum extent 
necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a 
cross-claim or counterclaim in a lawsuit) alleging that the Program itself 
(excluding combinations of the Program with other software or hardware) 
infringes such Recipient's patent(s), then such Recipient's rights granted 
under Section 2(b) shall terminate as of the date such litigation is filed. 

All Recipient's rights under this Agreement shall terminate if it fails to 
comply with any of the material terms or conditions of this Agreement and 
does not cure such failure in a reasonable period of time after becoming 
aware of such noncompliance. If all Recipient's rights under this Agreement 
terminate, Recipient agrees to cease use and distribution of the Program as 
soon as reasonably practicable. However, Recipient's obligations under this 
Agreement and any licenses granted by Recipient relating to the Program shall 
continue and survive. 

Everyone is permitted to copy and distribute copies of this Agreement, but in 
order to avoid inconsistency the Agreement is copyrighted and may only be 
modified in the following manner. The Agreement Steward reserves the right 
to publish new versions (including revisions) of this Agreement from time to 
time. No one other than the Agreement Steward has the right to modify this 
Agreement. The Eclipse Foundation is the initial Agreement Steward. The 
Eclipse Foundation may assign the responsibility to serve as the Agreement 
Steward to a suitable separate entity. Each new version of the Agreement will 
be given a distinguishing version number. The Program (including 
Contributions) may always be distributed subject to the version of the 
Agreement under which it was received. In addition, after a new version of the 
Agreement is published, Contributor may elect to distribute the Program 
(including its Contributions) under the new version. Except as expressly 
stated in Sections 2(a) and 2(b) above, Recipient receives no rights or 
licenses to the intellectual property of any Contributor under this Agreement, 
whether expressly, by implication, estoppel or otherwise. All rights in the 
Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the 
intellectual property laws of the United States of America. No party to this 
Agreement will bring a legal action under this Agreement more than one year 
after the cause of action arose. Each party waives its rights to a jury trial 
in any resulting litigation.

 
APPENDIX B

Copyright (C) 2001 Richard Herveille
richard@asics.ws 

This source file may be used and distributed without restriction provided that 
this copyright statement is not removed from the file and that any derivative 
work contains the original copyright notice and the associated disclaimer.

THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED 
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL 
THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

 
APPENDIX C

The following terms only apply to the executable code version of the SeaMonkey 
program made available with the Software ("the Product"):

The Product is subject to the Mozilla Public License, Version 1.1 (the "License"); 
you may not use the Product except in compliance with this License.  You may 
obtain a copy of the License at http://www.mozilla.org/MPL/

The Product distributed under this license is distributed on an "AS IS" basis, 
WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the License for 
specific language governing rights and limitations under the License.

A source code version of the SeaMonkey program is available to you from: 
http://www.seamonkey-project.org/releases/1.0.1


APPENDIX D

LATTICE SEMICONDUCTOR CORPORATION OPEN SOURCE LICENSE AGREEMENT

This is a legal agreement between You (Licensee, either a company or an 
individual), and Lattice Semiconductor Corporation, the Provider (Licensor) 
of the Software.  If a component covered by this Agreement can be 
included in the output files generated by the Provider's LatticeMico 
System or any other Provider source code generation tool, then Software 
refers to such output files that includes that component.  Otherwise, 
Software refers to the component on a standalone basis.  By 
proceeding with the installation, modification, use or distribution in whole 
or in part of Software that identifies itself as licensed under the Lattice 
Semiconductor Corporation Open Source License Agreement, You agree to be 
bound by the terms of this Agreement. If You do not agree to the terms of this 
Agreement, You are not permitted to use, modify or distribute the Software.

1. The Provider grants to You a personal, non-exclusive right to use and 
distribute the source code of the Software provided that:
 - You make distributions free of charge under these license terms
 - You ensure that the original copyright notices and limitations of liability 
and warranty sections remain intact.

2. The Provider grants to You a personal, non-exclusive right to modify the 
source code of the Software and incorporate it with other source code to 
create a Derivative Work (as defined below).  At Your discretion, You may
distribute this Derivative Work under terms of Your choosing provided:
 - You arrange Your design such that the Derivative Work is an identifiable 
module within Your overall design.
 - You distribute the source code associated with the modules containing the 
Derivative Work in a customarily accepted machine-readable format, free of 
charge under a license agreement that contains these license terms. 
 - You ensure that the original copyright notices and limitations of liability 
and warranty sections remain intact.
 - You clearly identify areas of the source code that You have modified.

"Derivative Work" means a version of the Software in source code form that 
contains modifications or additions to the original source code and includes all 
Software files used to implement Your design. Derivative Work does not include 
identifiable modules within Your design that are not derived from the Software
and that can be reasonably considered independent and separate modules from 
the Software.

3. The Provider grants to You a personal, non-exclusive right to use object 
code created from the Software or a Derivative Work to physically implement 
the design in devices such as a programmable logic devices or application 
specific integrated circuits.  You may distribute these devices without 
accompanying them with a copy of this license or source code.

4. This Software is provided free of charge.  IN NO EVENT WILL THE PROVIDER 
OR ANY OF ITS SUPPLIERS BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY 
DAMAGES, INCLUDING ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR 
SPECIAL DAMAGES, WHETHER CHARACTERIZED AS EXPENSES, LOST PROFITS, LOST 
SAVINGS, OR OTHER DAMAGES OF ANY SORT, ARISING OUT OF THE USE OF OR INABILITY 
TO USE THE SOFTWARE, EVEN IF THE PROVIDER HAS BEEN ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGES.

5. THE PROVIDER  MAKES NO WARRANTIES WITH RESPECT TO THE SOFTWARE, WHETHER 
EXPRESSED, IMPLIED, STATUTORY, OR IN ANY OTHER PROVISION OF THIS AGREEMENT OR 
COMMUNICATION WITH YOU, AND THE PROVIDER SPECIFICALLY DISCLAIMS ANY IMPLIED 
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR 
NON-INFRINGEMENT OF THIRD PARTY RIGHTS. THE PROVIDER DOES NOT WARRANT THAT USE 
OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE. YOU ASSUME RESPONSIBILITY 
FOR SELECTION OF THE SOFTWARE TO ACHIEVE ITS INTENDED RESULTS AND FOR THE 
PROPER INSTALLATION, USE, AND RESULTS OBTAINED FROM THE SOFTWARE. YOU ASSUME 
THE ENTIRE RISK OF THE SOFTWARE PROVING DEFECTIVE OR FAILING TO PERFORM 
PROPERLY, AND IN SUCH EVENT, YOU ASSUME THE ENTIRE COST AND RISK OF ANY 
REPAIR, SERVICE, CORRECTION, OR ANY OTHER LIABILITIES OR DAMAGES CAUSED BY OR 
ASSOCIATED WITH THE SOFTWARE. THE SOLE LIABILITIES AND REMEDIES ASSOCIATED 
WITH THE SOFTWARE ARE SET FORTH ABOVE. 

6. Export Control. You agree that neither the Software nor any Derivative 
Work will be exported, directly or indirectly, into any country or to any 
person or entity, in violation of laws or regulations of the United States 
government. This Agreement will be governed by the substantive laws of the 
State of Oregon, USA.

7. Default and Termination. This Agreement will continue indefinitely, until 
and unless terminated. You may terminate this Agreement by destroying all 
copies of the materials to which this Agreement applies.  The Agreement will 
terminate automatically if due to any event, including court judgment, You 
fail to perform any of Your obligations hereunder. In the event of termination, 
others that have received software from You under the terms of this Agreement 
may continue to use it provided they remain in compliance with the terms of 
this Agreement.

8. Your use of this Software is governed by this Lattice Semiconductor 
Corporation Open Source License Agreement.  However, depending on your design, 
the output files generated by the LatticeMico System or by any 
other Provider source code generation tool may contain open 
source code provided by a third party.  Specifically, the output files may 
contain open source code that is licensed pursuant to the terms attached to 
the Lattice Semiconductor Corporation LatticeMico System License Agreement 
as Appendix B.  By agreeing to the terms of this Lattice Semiconductor 
Corporation Open Source License Agreement, you are also agreeing to use such 
code in accordance with the terms of the agreement under which such code has 
been licensed, if applicable.

9. From time to time Lattice Semiconductor Corporation may issue revised 
versions of the Lattice Semiconductor Open Source License Agreement.  
Revisions will follow the spirit of this version but will contain adjustments 
and clarifications to address issues and concerns of Lattice and the user 
community.

10. Any conflict between the terms of this Agreement and the licensing terms 
included in the header files provided with the Software will be resolved in 
favor of this Agreement.

(c)2006-2011 Lattice Semiconductor Corporation. You may freely distribute 
the text of this Agreement provided you include this copyright notice.  
However, modifications to the substantive terms herein are not permitted. 
