End-User License Agreement

NoMachine - Luxembourg

NoMachine Product License

Copyright (c) 2002-2015 NoMachine S.à.r.l. All Rights Reserved.

This is a legal agreement ("Agreement") between you, the "Licensee",
and NoMachine S.à.r.l. ("NoMachine"), owner and titleholder of all
copyrights, intellectual property and trademarks of the NoMachine
Software.

Notice to User:
This NoMachine Software Technology License Agreement ("License Agree-
ment") covers your use of NoMachine Software that accompanies this
License Agreement and related software components, which may include
associated media, printed materials, and "online" or electronic
documentation. If you do not agree to the terms of this License
Agreement, do not install or use the Software. By explicitly accepting
this License Agreement, however, or by installing, copying, downloading,
accessing, or otherwise using the Software, you are acknowledging and
agreeing to be bound by the following terms.




1.Definitions


"Permitted Number" means one (1) unless indicated otherwise by a valid
license certificate.

"Documentation" means the online documentation and printed documentation,
if any, provided to Licensee in connection with Software, except for
documentation provided under third party or open source licenses as
provided in Sections 4.2 and 4.3 below. Whenever the context reasonably
permits, any reference in this Agreement to Software shall also apply to
Documentation. The Documentation may be used by Licensee, but only
in connection with this Software.


"Software" means (a) all of the contents of the files (delivered electron-
ically or on physical media), or disk(s) or other media with which this
agreement is provided, which may include (i) NoMachine software,
Open Source Software or Third Party Software; (ii) related explanatory
written materials or files ("Documentation"); and (iii) fonts; and
(b)images, sounds, clip art and other artistic works ("Media") bundled
with NoMachine software; and (c) upgrades, modified versions, updates,
additions, and copies of the foregoing, provided to you by NoMachine at
any time (collectively, "Updates").


"Open Source Software" components (or portions thereof) included
with this NoMachine software product are distributed under the original
license terms. Copyright statements and licenses applied to Open Source
Software components (or portions thereof) can be found in the
"credits" file.


"Third-Party Software". Some of the Software Programs included in the
Software are distributed under the terms of agreements with third parties
which may expand or limit your rights to use certain Software Programs
as set forth in Sections 2, 3 and 4.



2. GRANT OF LICENSE AND TERMS OF USE


2.1     Subject to your compliance with the terms and conditions of this
Agreement, NoMachine and its authorized suppliers grant you a limited,
nonexclusive and nontransferable license to install and use the Software
on a compatible device or Computer in the manner and for the purposes in
accordance with (i) the Documentation; (ii) the License Type for which you
have paid the fees where applicable.

(a) Individual Use. You may install and use the Permitted Number of copies
of the Software on a compatible Computer for your private non-commercial
use unless otherwise specified in the Software documentation.

(b) Commercial Use. Commercial use of the Software is governed by the
accompanying License Type acquired separately from NoMachine and for which,
where applicable, a fee has been paid. Unless otherwise provided in the
Software Documentation, you may install and use the Permitted Number of
copies of the Software on a compatible device. A "Commercial User" is
defined as an individual or entity, or an individual acting on behalf of
an entity, who uses the Software for commercial or business purposes.

(c) Distribution: Redistribution of Software developed by NoMachine is
strictly forbidden without written permission by NoMachine.

(d) Back up Copy. You may not copy the Software except for a reasonable
number of machine-readable copies of the Software for backup or archival
purposes and except as expressly permitted in this EULA. All copies of the
Software must reproduce all proprietary notices, labels, or marks.

Notwithstanding the foregoing, this Agreement shall not prevent or restrict
you from exercising additional or different rights to any free, Open Source
Software, documentation and materials contained in or provided with the
Software in accordance with the applicable free, open source license for
such code, documentation, and materials.


3. DESCRIPTION OF OTHER RIGHTS, LIMITATIONS, AND OBLIGATIONS

3.1     Transfer. You may not rent, lease, sublicense, assign or trans-
fer your rights in the Software, or authorize all or any portion of
the Software to be copied onto another user's Computer except as may
be expressly permitted by this Agreement. You may, however, transfer all
your rights to use the Software to another person or legal entity provided
that (a) you also transfer ( i)  this agreement, and (ii) the Software and
all other Software or hardware bundled or pre-installed with the Software,
including all copies, updates prior  versions, 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 obtained a valid license to
the Software. Notwithstanding the foregoing you may not transfer pre-release,
or not for resale copies of the Software.

3.2     No Modification, Reverse Engineering or Leasing.  No modification,
adaptation, translation of the software is permitted, including modification
to the graphical contents, without specific and prior permission from
NoMachine. You may not decompile, decrypt, reverse engineer, disassemble
or otherwise reduce the Software to human-readable form to gain access to
trade secrets or confidential information in the Software, except to the
extent the foregoing restriction is expressly prohibited by applicable law.
Nor shall you, or permit any other person to do, the foregoing without
explicit permission from NoMachine; (ii) remove, alter, cover or obfuscate
any copyright notices or other proprietary rights notices placed or embedded
by NoMachine on or in any Software or Documentation; (iii) sell, resell
for a profit, rent, lease or lend the Software or Documentation or use it
for commercial time sharing, rental or service bureau use; (iv) use the
Software or any component thereof for any illegal purposes; or (v) use
the Software or Documentation, or any component thereof, to enable
copyright protection-circumvention devices or to violate or circumvent
in any manner any content copyright, content protection scheme, or content
copy policies. Notwithstanding the foregoing, this Agreement shall not
prevent or restrict you from exercising additional or different rights to
any free, open source code, documentation and materials contained in or
provided with the  Software in accordance with the applicable free, open
source license for such code, documentation, and materials.

3.3    Licensed, Not Sold. The Software, including Third Party Software, is
not sold, but is licensed and distributed to Licensee. Any reference to the
purchase or sale of a product means, with respect to NoMachine Software
and Third Party Software, a purchase or sale of the applicable licenses.
The license fees for such licenses are included in the product purchase
price. No fee is charged for any Open Source Software license, but a fee
for distribution (e.g., transferring a copy or copies to Licensee) is
included in the product purchase price. Ownership of copies of Open
Source Software, NoMachine Software and Third Party Software is governed
by the applicable license agreement.

3.4  Proprietary Rights. No title to or ownership of the Software is
transferred to you. NoMachine and/or its licensors own and retain all title
and ownership of all intellectual property rights in and to the Software,
including any adaptations or copies.

4. LIMITED WARRANTY AND DISCLAIMER & LIABILITIES

4.1     NoMachine Software. NoMachine warrants that if Software fails
to substantially conform to the specifications in the Documentation or to
any other Software specifications published by NoMachine, and if the non-
conformity is reported in writing by Licensee to NoMachine within 30 days
from the date the License is purchased, then NoMachine shall either remedy
the nonconformity or offer to refund the purchase price, if applicable,
to Licensee. In the event of a refund, the License shall terminate.

4.2    Third Party Software. Warranties, if any, applicable to Third Party
Software will be the warranties made by the third party licensors in the
applicable license agreements.

4.3    Open Source Software. Pursuant to the various open source licenses
there is no warranty applicable to Open Source Software.


4.4    Disclaimer Of Warranties. NOMACHINE MAKES NO WARRANTY, PROMISE OR
REPRESENTATION NOT EXPRESSLY SET FORTH IN THIS AGREEMENT. EXCEPT AS
EXPRESSLY WARRANTED HEREIN, THE Software IS PROVIDED "AS IS" WITHOUT
WARRANTY OR REPRESENTATION OF ANY KIND. NOMACHINE  MAKES NO WARRANTY OR
REPRESENTATION WITH RESPECT TO THIRD PARTY SOFTWARE. OPEN SOURCE SOFT-
WARE IS PROVIDED "AS IS" WITHOUT WARRANTY OR REPRESENTATION OF ANY KIND.
NOMACHINE DISCLAIMS AND EXCLUDES ALL IMPLIED WARRANTIES INCLUDING,
WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCH-
ANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. NOMACHINE DOES NOT
WARRANT THAT ANY SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR
THAT IT IS WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL
BE UNINTERRUPTED. THIS AGREEMENT GIVES LICENSEE SPECIFIC LEGAL RIGHTS.
LICENSEE MIGHT HAVE OTHER RIGHTS, WHICH VARY FROM STATE/JURISDICTION
TO STATE/JURISDICTION. The provisions of Section 3 shall survive the
termination of this Agreement, howsoever caused, but this shall not
imply or create any continued right to use the Software after term-
ination of this Agreement.

4.5    Limitation On Liability. IN NO EVENT WILL NOMACHINE OR ITS
SUPPLIERS BE LIABLE TO YOU FOR ANY DAMAGES, CLAIMS OR COSTS WHAT-
SOEVER OR ANY CONSEQUENTIAL, INDIRECT, INCIDENTAL, DAMAGES, OR ANY
LOST PROFITS OR LOST SAVINGS. THE FOREGOING LIMITATIONS AND EXCLUS-
IONS APPLY TO THE EXTENT PERMITTED BY APPLICABLE LAW IN YOUR JURIS-
DICTION. THE AGGREGATE LIABILITY OF NOMACHINE ARISING FROM OR RELAT-
ING TO THIS AGREEMENT OR ANY OF THE SOFTWARE (REGARDLESS OF THE FORM
OF ACTION OR CLAIM - E.G., CONTRACT,WARRANTY, TORT, STRICT LIABILITY,
MALPRACTICE, FRAUD AND/OR OTHERWISE) SHALL NOT EXCEED THE TOTAL PAYMENT
MADE BY LICENSEE TO PURCHASE THE SOFTWARE. NOMACHINE SHALL NOT IN ANY
CASE BE LIABLE FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR
PUNITIVE DAMAGES, OR FOR LOSS OF PROFIT, REVENUE, DATA, OR PROGRAMS, EVEN
IF NOMACHINE HAS BEEN ADVISED OF THE POSSIBILITY THEREOF.

5. AUTHORIZED DISTRIBUTORS AND RESELLERS
NoMachine authorized distributors and resellers do not have the right to
make modifications to this Agreement or to make any additional represent-
ations, commitments, or warranties binding on NoMachine.

6. RESPONSIBILITY FOR DECISIONS
Licensee is responsible for decisions made and actions taken based on the
Software.

7. NON-PARTIES
The officers, directors, employees, shareholders and representatives of
NoMachine are not parties to this Agreement and shall have no obligation
or liability to Licensee relating to this Agreement or the Software.

8. SOLE REMEDY AND ALLOCATION OF RISK
Licensee's sole and exclusive remedy is set forth in this agreement.This
Agreement defines a mutually agreed-upon allocation of risk and the
License fees reflect such allocation of risk.

9. SUPPORT
Nothing in this Agreement entitles Licensee to any support, maintenance
or new versions or distributions of any Software. Licensee may contact
NoMachine to determine the availability of support, maintenance and new
versions and distributions of the Software, and the fees, terms and cond-
itions applicable there to.

10. GOVERNING LAW
This Agreement shall be governed by the laws of the state of Luxembourg
without giving effect to conflict or choice of law principles. The parties
agree to exclude application of the "United Nations Convention on Contracts
for the International Sale of Goods" to this Agreement. Any litigation between
the Parties shall be conducted exclusively by the courts of Luxembourg City.
The parties agree and submit to such exclusive jurisdiction and venue.

11. ENTIRE AGREEMENT
This Agreement sets forth the entire understanding and agreement between
the parties relating to the subject matter of this Agreement and may be
amended only in a writing signed by both parties. No vendor, distributor,
OEM, VAR, reseller, dealer, retailer, sales person or other person is
authorized by NoMachine to modify this Agreement or to make any warranty,
representation or promise which is different than, or in addition to, the
warranties, representations and promises of this Agreement.

12. TERMINATION
The License shall automatically terminate if Licensee materially breaches
this Agreement. Upon termination of the License, Licensee shall cease all
use of the Software and shall destroy all copies of the Software within
the possession or control of Licensee and shall return the original Soft-
ware and Documentation, if any, to NoMachine.

13. EXPORT LAWS
Licensee shall not export, disclose or distribute any Software in violation
of any applicable laws or regulations, including the export laws and
regulations of Luxembourg, and shall comply with all such laws and regulations.

14. CONSTRUCTION
In the construction and interpretation of this Agreement, no rule of strict
construction shall apply against either party.

15. SEVERABILITY
If any provision in this Agreement is invalid or unenforceable or contrary to
applicable law, such provision shall be construed, limited, or altered, as
necessary, to eliminate the invalidity or unenforceability or the conflict
with applicable law, and all other provisions of this Agreement
shall remain in effect.

16. H.264/AVC NOTICE
THIS PRODUCT IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE
PERSONAL USE OF A CONSUMER OR OTHER USES IN WHICH IT DOES NOT RECEIVE
REMUNERATION TO (i) ENCODE VIDEO IN COMPLIANCE WITH THE AVC STANDARD
("AVC VIDEO") AND/OR (ii) DECODE AVC VIDEO THAT WAS ENCODED BY A CONSUMER
ENGAGED IN A PERSONAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER
LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED
FOR ANY OTHER USE. ADDITIONAL AVC PATENT PORTFOLIO LICENSE INFORMATION
MAY BE OBTAINED FROM MPEG LA, L.L.C. SEE HTTP://WWW.MPEGLA.COM

NoMachine's End User License Agreement is subject to revisions. Please see
http://www.nomachine.com/ for any updates.



ACKNOWLEDGEMENTS

NoMachine Software contains Open Source software for which this
EULA does not apply. Such software, which are subject to other terms and
conditions, are listed together with their original copyright statements
and license terms in the "credits" file accompanying this Software.


Certain components of the NoMachine Software have been released by
NoMachine under an open source license. Such components are listed in the
"credits" file and must be used in accordance with the applicable open source
license terms and conditions.

In accordance with Open Source Software license terms, NoMachine makes
available the corresponding source files at:

http://www.nomachine.com/opensource


For those components not eventually available for download, upon request
NoMachine will deliver all the relative third-party source code, consistent
with the licensing terms of the original software, and documentation at the
cost of the postage charges incurred.
