                            LUCENT TECHNOLOGIES INC.

                      PLAN 9 OPEN SOURCE LICENSE AGREEMENT

   PLEASE READ  THIS  AGREEMENT  (INCLUDING THE  EXHIBITS)  CAREFULLY  BEFORE
   PROCEEDING. BY  CLICKING  ON  THE  "ACCEPT"  BUTTON,  OR  BY  DOWNLOADING,
   INSTALLING, USING,  COPYING, MODIFYING  OR  DISTRIBUTING THE  SOFTWARE  OR
   DERIVATIVE  WORKS  THEREOF,  YOU  ARE  CONSENTING  TO  BE  BOUND  BY  THIS
   AGREEMENT.

   IF YOU DO NOT AGREE  TO ALL OF THE TERMS  OF THIS AGREEMENT, CLICK ON  THE
   "DO NOT  ACCEPT" BUTTON  AND THE  INSTALLATION/DOWNLOAD PROCESS  WILL  NOT
   CONTINUE.

   1.	DEFINITIONS

     1. "Agreement" means this Lucent Technologies Inc. Plan 9 Open Source
        License Agreement (including Exhibits).

     1. "Contributor(s)" means any individual or legal entity that creates or
        contributes to a Modification of the Original Software.

     1. "Licensee" means an individual or a legal entity entering into and
        exercising rights under this Agreement. For the purposes hereunder,
        Licensee includes any entity that controls, is controlled by, or is
        under common control with Licensee. For purposes of this definition,
        "control" means (i) the power, direct or indirect, to cause the
        direction or management of such entity, whether by contract or
        otherwise; or (ii) ownership of fifty percent (50%) or more of the
        controlling shares or beneficial ownership of such entity. Licensee
        is also referred to herein as "You" with "Your" as the possessive.

     1. "Licensed Software" means the Original Software, Modifications, or
        any combination of the Original Software and Modifications.

     1. "Lucent" means Lucent Technologies Inc., a Delaware corporation
        having an office at 600 Mountain Ave., Murray Hill, NJ 07974, its
        related companies and/or affiliates.

     1. "Modification(s)" means any addition, deletion, change, or
        improvement to the Original Software or prior Modifications thereto.
        Modifications do not include additions to the Original Software or
        prior Modifications which (i) are separate modules of software which
        may be distributed in conjunction with Licensed Software; or (ii) are
        not derivative works of the Licensed Software itself.

     1. "Object Code" means machine executable software code.

     1. "Original Contributor" means Lucent and its Licensors, collectively.

     1. "Original Software" means the Plan 9 Software, in both Source Code
        form and Object Code form, and any associated documentation, as
        furnished under this Agreement.

     1. "Plan 9 Software" means a network operating system designed for
        research into distributed services, applications and software
        development.

     1. "Plan 9 Trademark" means the trademark PLAN 9 (for which Lucent has
        acquired common law rights and for which Lucent owns U.S. Trademark
        Registration Number 2,065,577).

     1. "Recipient" means any individual or legal entity receiving the
        Licensed Software under this Agreement, including all Contributors,
        or receiving the Licensed Software under another license agreement as
        authorized herein.

     1. "Source Code" means human readable software code.

   2.0	GRANT OF RIGHTS

   2.1	Subject to the terms of this Agreement and to third party intellectual
   property claims, Lucent grants to Licensee, a royalty-free,  nonexclusive,
   non-transferable, worldwide license  to use,  reproduce, modify,  execute,
   display, perform, distribute and  sublicense, the Original Software  (with
   or without Modifications) in Source Code form and/or Object Code form  for
   commercial  and/or  non-commercial   purposes.  This   grant  includes   a
   nonexclusive and non-transferable license  under any patents which  Lucent
   has a right to  license and which, but  for this license, are  unavoidably
   and necessarily infringed by the  execution of the inherent  functionality
   of the  Original Software  in  the form  furnished under  this  Agreement.
   Nothing in this Agreement shall be construed as conferring in any way  (by
   implication, estoppel  or  otherwise)  any  license  or  right  under  any
   existing or future patent claim which is directed to a combination of  the
   functionality of the Original Software with the functionality of any other
   software programs, or  a combination  of hardware systems  other than  the
   combination of the  Original Software  and the hardware  or firmware  into
   which the Original Software is  loaded. Distribution of Licensed  Software
   to third parties pursuant to this grant shall be subject to the same terms
   and conditions as set  forth in this Agreement,  and may, at Your  option,
   include a reasonable charge for  the cost of any  media. You may also,  at
   Your option,  charge  for any  other  software, product  or  service  that
   includes or incorporates the Original Software as a part thereof.

   2.2	No right is granted  to Licensee to create  derivative works of or  to
   redistribute (other  than  with  the Original  Software  or  a  derivative
   thereof)  the  screen   imprinter  fonts  identified   in  subdirectory   
   /lib/font/bit/lucida and printer fonts  (Lucida Sans Unicode, Lucida  Sans
   Italic,   Lucida   Sans   Demibold,   Lucida   Typewriter,   Lucida   Sans
   Typewriter83), identified in subdirectory /sys/lib/postscript/font.

   2.3	Exhibit A contains  additional terms  and conditions  relating to  the
   printer fonts identified in subdirectory /sys/lib/ghostscript/font. In the
   case of any conflict between the provisions of the body of this  Agreement
   and Exhibit A regarding  such printer fonts, the  provisions of Exhibit  A
   shall control.

   2.4	The Original Software licensed herein contains material copyrights  by
   the Original Contributor, including but  not limited to Lucent, B&H  Inc.,
   and Y&Y  Inc. No  rights are  granted with  respect to  Original  Software
   except as expressly provided herein.

   2.5	Lucent grants to Licensee a nonexclusive, royalty free, worldwide
   license to use the Plan 9 Trademark solely in connection with the Plan 9
   operating system source code (or object code) and documentation. Such use
   by Licensee of the Plan 9 Trademark shall be in accordance with the
   following quality standards and controls:

     * Any use of the Plan 9 Trademark must be made under the terms of this
       Agreement;
     * The Plan 9 Trademark may not be combined with any other mark or logo
       to form a composite mark or logo or suggest that the Parties are part
       of one company.

   Upon Lucent's written request and at Licensee's expense, Licensee will
   provide Lucent with a representative sample of Licensee's promotional
   materials bearing the Plan 9 Trademark. If, for any reason, Lucent
   determines that the quality standards or controls applied by Licensee to
   the Plan 9 system source code and documentation fall below those that are
   consistent with Lucent's standards, upon written notice of the deficiency
   to Licensee, Lucent may, at its sole option and discretion, terminate
   Licensee's right to use the Plan 9 Trademark upon written notice to
   Licensee.

   Licensee acknowledges that Lucent is the owner of the Plan 9 Trademark and
   all goodwill attached thereto. This Agreement does not give Licensee any
   interest in the Plan 9 Trademark except the right to use the mark in
   accordance with the provisions of this Agreement. Licensee agrees not to
   attempt to register the Plan 9 Trademark nor to adopt, attempt to register
   or register anywhere in the world a mark the same as or confusingly
   similar to the Plan 9 Trademark.

    

   3.0 	DISTRIBUTION OBLIGATIONS

   3.1	Modifications which You create or to which You contribute are governed
   by the terms of this Agreement and must be made available under the  terms
   of this Agreement in at least the same form as the Source Code version  of
   Original Software  furnished hereunder.  Any distribution  by You  of  the
   Source Code version of Licensed Software  must be made under the terms  of
   this Agreement or any future version of this Agreement under Section 11.0,
   and You must include a copy of this Agreement with each and every copy  of
   such Source Code version  of Licensed Software  which You distribute.  You
   may not offer  or impose  any terms  on any  such Source  Code version  of
   Licensed Software that  alters or  restricts the terms  of the  applicable
   version of  this  Agreement  or the  Recipients'  rights  and  obligations
   hereunder.

   3.2	You must cause  all Licensed  Software to which  You contribute,  i.e.
   Your Modifications, to  contain a clear  identification, e.g., a  separate
   file, documenting  the changes  made by  You and  identifying You  as  the
   Contributor that reasonably allows  subsequent Recipients to identify  the
   originator of the  Modification. To  the extent  You create  at least  one
   Modification, You may  add Your  name as  a Contributor  to the  requisite
   notice described in Section 3.3.

   3.3	With respect to Your distribution of Licensed Software (or any portion
   thereof), You  must include  the following  information in  a  conspicuous
   location governing such distribution  (e.g., a separate  file) and on  all
   copies of any Source Code version of Licensed Software You distribute:

   "The contents  herein  includes  software initially  developed  by  Lucent
   Technologies Inc. and others,  and is subject to  the terms of the  Lucent
   Technologies Inc. Plan 9 Open Source License Agreement. A copy of the Plan
   9    Open     Source     License    Agreement     is     available     at:
   http://plan9.bell-labs.com/plan9dist/download.html or by contacting Lucent
   Technologies at http://www.lucent.com.

   All software distributed under such Agreement is distributed on an "AS IS"
   basis, WITHOUT WARRANTY OF  ANY KIND, either express  or implied. See  the
   Lucent Technologies  Inc. Plan  9 Open  Source License  Agreement for  the
   specific language governing all rights, obligations and limitations  under
   such Agreement.

   Portions of the software developed by Lucent Technologies Inc. and others
   are Copyright O 2002. All rights reserved.

   Contributor(s):___________________________"

   3.4	You may distribute Licensed  Software in Object  Code form using  this
   Agreement, or under  a license  of Your choice  provided that  You are  in
   compliance with this  Agreement and  Your license: (a)  complies with  the
   terms and conditions of  this Agreement; (b) does  not limit or alter  the
   Recipient's rights  and obligations  in  the Source  Code version  of  the
   Licensed Software set forth in this Agreement; (c) states that the  Source
   Code version of the Licensed Software is available from You, and describes
   how it may be obtained by  Recipient; (d) effectively disclaims on  behalf
   of  Original  Contributor   and  all  Contributors   all  warranties   and
   conditions, express  or implied,  including  warranties or  conditions  of
   title  or  non-infringement,  and  implied  warranties  or  conditions  of
   merchantability and  fitness for  a  particular purpose;  (e)  effectively
   excludes on  behalf  of  Original Contributor  and  all  Contributors  all
   liability for damages,  including direct,  indirect, special,  incidental,
   and consequential damages;  and (f)  clearly states that  any terms  which
   differ from  this Agreement  are offered  by You  alone, not  by  Original
   Contributor or  any  other  Contributor. You  hereby  agree  to  indemnify
   Original Contributor or any other  Contributor for any liability  incurred
   by Original Contributor  or any other  Contributor as result  of any  such
   differing terms You offer in Your license.

   3.5	You may not use  the names "Lucent Technologies",  "Bell Labs" or  any
   other name associated with Lucent or any Lucent trademark for any purposes
   other than as specifically provided in this Agreement.

   3.6	You must  include  all of  the  original copyright,  labels  or  other
   notices on the Licensed  Software on any copies  of the Licensed  Software
   which You make; and include with the distribution of any Modifications You
   create a copy (or  an offer to provide  such a copy at  no charge) of  the
   Licensed Software, on the same terms as set forth in this Agreement.

   3.7	While this Agreement contemplates the commercial use and  distribution
   of Licensed  Software,  commercial distributors  of  software may,  for  a
   variety of  reasons,  accept  certain  responsibilities  with  respect  to
   customers, licensees, business partners and the  like. As such, if You  or
   any  Contributor  include  Licensed  Software  in  a  commercial  offering
   ("Commercial Contributor"), such Commercial  Contributor agrees to  defend
   and  indemnify   Original   Contributor   and   all   other   Contributors
   (collectively "Indemnified Contributors")  against any liability,  losses,
   damages and costs arising  from claims, lawsuits  and other legal  actions
   brought by any  third party  against the Indemnified  Contributors to  the
   extent caused by the acts or  omissions of such Commercial Contributor  in
   connection with  its  use  or  distribution  of  Licensed  Software  in  a
   commercial offering of any kind.

   4.0 	MODIFICATIONS

   You agree to provide the Original Contributor, at its request, with a copy
   of the  complete Source  Code  version, Object  Code version  and  related
   documentation for  Modifications  created  or contributed  to  by  You  if
   distributed in  any form,  e.g., binary  or source.  Original  Contributor
   and/or  other   Contributors   shall  have   unrestricted,   nonexclusive,
   worldwide, perpetual,  royalty-free  rights, to  use,  reproduce,  modify,
   display, perform,  sublicense and  distribute such  Modifications, and  to
   grant third parties the right to do so, including without limitation as  a
   part of or  with the  Licensed Software; and  Original Contributor  and/or
   other Contributors  shall  have  the  right to  license  or  to  otherwise
   transfer to third parties such Modifications without notice, obligation or
   recourse to You. You grant to Original Contributor, Contributors and their
   respective licensees all  rights and licenses  (including patents) as  are
   necessary to incorporate the Modifications  created or contributed and  so
   distributed by You into  the Licensed Software and  to use, distribute  or
   otherwise exploit such Licensed Software without payment or accounting  to
   You.

    5. TITLE

   Title, ownership rights, and intellectual property rights in the  Original
   Software  and  the  Plan  9   Trademark  shall  remain  in  the   Original
   Contributor. Original Contributor  and/or the  other Contributors  reserve
   all rights not expressly granted to You, and no other licenses are granted
   or implied.  The Licensed  Software  is protected  by copyright  laws  and
   treaties.

   6.0 	TERMINATION

     1. The licenses and rights granted under this Agreement shall terminate
        automatically if (i) You fail to comply with all of the terms and
        conditions herein; or (ii) You initiate or participate in any
        intellectual property action against Original Contributor.

     1. The rights and obligations of the parties hereto which by their
        nature would continue beyond termination of this Agreement shall
        survive and continue after any such termination of this Agreement.

     1. Upon termination for any reason, You must destroy all copies of the
        Licensed Software in Your possession. All sublicenses of Licensed
        Software which were validly granted by You to third parties under
        this Agreement shall survive such termination.

   7.0 DISCLAIMER OF WARRANTY

   YOU UNDERSTAND AND ACKNOWLEDGE  THAT, TO THE  FULLEST EXTENT PERMITTED  BY
   LAW, THE LICENSED SOFTWARE IS LICENSED UNDER THIS AGREEMENT FREE OF CHARGE
   ON AN  &QUOT;AS IS&QUOT;  BASIS WITH  ALL FAULTS,  LATENT AND  PATENT  AND
   WITHOUT ANY  WARRANTY OF  ANY  TYPE. ORIGINAL  CONTRIBUTOR AND  THE  OTHER
   CONTRIBUTORS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESSED OR  IMPLIED.
   BY WAY OF  EXAMPLE, BUT NOT  OF LIMITATION, ORIGINAL  CONTRIBUTOR AND  THE
   OTHER CONTRIBUTORS MAKE NO  REPRESENTATIONS OF MERCHANTABILITY OR  FITNESS
   FOR A PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE WILL NOT
   INFRINGE ANY  PATENT OR  OTHER INTELLECTUAL  PROPERTY RIGHT  OF ANY  THIRD
   PARTY AND  IT  SHALL  BE THE  SOLE  RESPONSIBILITY  OF YOU  TO  MAKE  SUCH
   DETERMINATION AS IS NECESSARY WITH RESPECT TO THE ACQUISITION OF  LICENSES
   UNDER PATENTS  OR OTHER  INTELLECTUAL PROPERTY  RIGHTS OF  THIRD  PARTIES.
   ORIGINAL CONTRIBUTOR AND THE  OTHER CONTRIBUTORS DO  NOT WARRANT THAT  THE
   FUNCTIONS OF THE  LICENSED SOFTWARE  WILL MEET YOUR  REQUIREMENTS OR  THAT
   LICENSED SOFTWARE  OPERATION  WILL  BE ERROR-FREE  OR  UNINTERRUPTED.  YOU
   ASSUME THE RISK OF ANY  AND ALL DAMAGE OR LOSS  FROM USE, OR INABILITY  TO
   USE,  THE   LICENSED  SOFTWARE.   ORIGINAL  CONTRIBUTOR   AND  THE   OTHER
   CONTRIBUTORS BEAR NO RESPONSIBILITY FOR CORRECTING THE LICENSED  SOFTWARE,
   SUPPLYING ASSISTANCE FOR FIXING, OR FOR COMMUNICATING KNOWN ERRORS TO  YOU
   PERTAINING TO THE LICENSED SOFTWARE FURNISHED HEREUNDER.

   ORIGINAL CONTRIBUTOR AND THE OTHER CONTRIBUTORS  SHALL NOT BE HELD TO  ANY
   LIABILITY WITH RESPECT TO ANY PATENT INFRINGEMENT OR ANY OTHER CLAIM  MADE
   BY YOU OR ANY THIRD PARTY ON ACCOUNT  OF, OR ARISING FROM THE USE OF,  THE
   LICENSED SOFTWARE PROVIDED HEREUNDER.

   SOME STATES DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE
   EXCLUSION MAY NOT APPLY TO YOU. YOU  MAY ALSO HAVE OTHER RIGHTS THAT  VARY
   FROM JURISDICTION TO JURISDICTION.

   8.0 	LIMITATION OF LIABILITY

   UNDER NO  CIRCUMSTANCES AND  UNDER  NO LEGAL  THEORY, TORT,  CONTRACT,  OR
   OTHERWISE, SHALL  ORIGINAL CONTRIBUTOR  AND/OR THE  OTHER CONTRIBUTORS  BE
   LIABLE TO YOU OR ANY OTHER THIRD PARTY FOR DAMAGES OF ANY KIND  INCLUDING,
   BUT  NOT  LIMITED  TO,  ANY  DIRECT,  INDIRECT,  SPECIAL,  INCIDENTAL,  OR
   CONSEQUENTIAL DAMAGES  OF  ANY  CHARACTER  WHATSOEVER  INCLUDING,  WITHOUT
   LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER  FAILURE
   OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF
   THE ORIGINAL CONTRIBUTOR  AND/OR ANY  OTHER CONTRIBUTORS  SHALL HAVE  BEEN
   INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER
   PARTY. FURTHERMORE,  SOME  JURISDICTIONS DO  NOT  ALLOW THE  EXCLUSION  OR
   LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION  AND
   EXCLUSION MAY  NOT APPLY  TO YOU.  TO  THE EXTENT  THAT ANY  EXCLUSION  OF
   DAMAGES ABOVE  IS NOT  VALID, YOU  AGREE THAT  IN NO  EVENT WILL  ORIGINAL
   CONTRIBUTOR'S AND ALL OTHER CONTRIBUTORS' TOTAL LIABILITY UNDER OR RELATED
   TO THIS AGREEMENT EXCEED ONE THOUSAND DOLLARS ($1000.00 US).

   9.0 	EXPORT CONTROL

   You acknowledge  that the  Licensed  Software hereunder  is  "unrestricted
   encryption source code"  as the term  is defined under  the United  States
   Export Administration Regulations and is  subject to export control  under
   such laws and regulations. You agree that, if you export or re-export  the
   Licensed Software  or any  modifications to  it, You  are responsible  for
   compliance with the  United States Export  Administration Regulations  and
   hereby indemnify the Original Contributor  and all other Contributors  for
   any liability incurred as a result.

   10.0 	U.S. GOVERNMENT RIGHTS

   You may only acquire the Licensed  Software on behalf of, or for  delivery
   to, any part of the United States Government, if the Licensed Software  is
   treated as commercial  computer software  and licensed  to the  Government
   under the terms and conditions of this Agreement, pursuant to the policies
   stated in 48  C.F.R. Section 12.212  (October 1995) or  48 C.F.R.  Section
   227.7202 (June 1995), as applicable.

   11.0 	LICENSE VERSIONS

   LUCENT, at its sole  discretion, may from time  to time publish a  revised
   and/or new version  of this Agreement  (each such revised  or new  version
   shall carry a distinguishing version number) which shall govern all copies
   of Licensed Software downloaded after the  posting of such revised or  new
   version of this Agreement.

   12.0 	MISCELLANEOUS

   This Agreement sets forth the  entire agreement and understanding  between
   the parties  as  to  the  subject  matter  hereof  and  merges  all  prior
   discussions between them. This Agreement shall be governed by the laws  of
   the State of New York, USA, excluding its conflict of law provisions.  The
   application  of  the  United  Nations  Convention  of  Contracts  for  the
   International  Sale  of  Goods  is  expressly  excluded.  YOUR   DOWNLOAD,
   INSTALLATION  AND  USE,  MODIFICATION  OR  DISTRIBUTION  OF  THE  LICENSED
   SOFTWARE IS EXPRESSLY  MADE CONDITIONAL ON  YOUR ASSENT TO  THE TERMS  SET
   FORTH HEREIN. You further  agree and acknowledge that  by clicking on  the
   "ACCEPT" button below, You shall have manifested acceptance to enter  into
   this Agreement and shall  be deemed to have  manually signed and  executed
   this Agreement making this an  enforceable Agreement between the  parties.
   If any  provision of  this Agreement  is held  to be  unenforceable,  such
   provision shall  be reformed  only  to the  extent  necessary to  make  it
   enforceable.

    

                     EXHIBIT A - GNU GENERAL PUBLIC LICENSE

                                        

                           GNU GENERAL PUBLIC LICENSE                         
                                                                              
                              Version 2, June 1991                            
                                                                              
   Copyright (C)  1989, 1991  Free Software  Foundation, Inc.  675 Mass  Ave, 
   Cambridge, MA 02139,  USA. Everyone  is permitted to  copy and  distribute 
   verbatim copies of this license document, but changing it is not allowed.  
                                                                              
                                    Preamble                                  
                                                                              
   The licenses for most software are  designed to take away your freedom  to 
   share and  change it.  By  contrast, the  GNU  General Public  License  is 
   intended to guarantee your freedom  to share and change free  software--to 
   make sure the  software is  free for all  its users.  This General  Public 
   License applies to most of the Free Software Foundation's software and  to 
   any other  program whose  authors commit  to using  it. (Some  other  Free 
   Software Foundation software is covered by the GNU Library General  Public 
   License instead.) You can apply it to your programs, too.                  
                                                                              
   When we speak of  free software, we are  referring to freedom, not  price. 
   Our General Public Licenses  are designed to make  sure that you have  the 
   freedom to distribute copies of free software (and charge for this service 
   if you wish), that you receive source code  or can get it if you want  it, 
   that you can change the software or use pieces of it in new free programs; 
   and that you know you can do these things.                                 
                                                                              
   To protect your rights, we need to make restrictions that forbid anyone to 
   deny you  these  rights or  to  ask you  to  surrender the  rights.  These 
   restrictions  translate  to  certain  responsibilities  for  you  if   you 
   distribute copies of the software, or if you modify it.                    
                                                                              
   For example, if you distribute copies of such a program, whether gratis or 
   for a fee, you must give the recipients all the rights that you have.  You 
   must make sure that they, too, receive or can get the source code. And you 
   must show them these terms so they know their rights.                      
                                                                              
   We protect your rights with two steps: (1) copyright the software, and (2) 
   offer  you  this  license  which  gives  you  legal  permission  to  copy, 
   distribute and/or modify the software.                                     
                                                                              
   Also, for each author's protection and ours, we want to make certain  that 
   everyone understands that there is no warranty for this free software.  If 
   the software  is modified  by someone  else  and passed  on, we  want  its 
   recipients to know that what  they have is not  the original, so that  any 
   problems introduced by others  will not reflect  on the original  authors' 
   reputations.                                                               
                                                                              
   Finally, any free program is threatened constantly by software patents. We 
   wish to  avoid the  danger  that redistributors  of  a free  program  will 
   individually  obtain  patent  licenses,  in  effect  making  the   program 
   proprietary. To prevent this, we have  made it clear that any patent  must 
   be licensed for everyone's free use or not licensed at all.                
                                                                              
   The  precise   terms  and   conditions  for   copying,  distribution   and 
   modification follow.                                                       
                                                                              
                           GNU GENERAL PUBLIC LICENSE                         
                                                                              
        TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION       
                                                                              
   0. This License  applies to  any program or  other work  which contains  a 
   notice placed by the copyright holder  saying it may be distributed  under 
   the terms of this General Public License. The "Program", below, refers  to 
   any such program or work, and a  "work based on the Program" means  either 
   the Program or any derivative work under copyright law: that is to say,  a 
   work containing the Program  or a portion of  it, either verbatim or  with 
   modifications  and/or  translated  into  another  language.  (Hereinafter, 
   translation is included  without limitation in  the term  "modification".) 
   Each licensee is addressed as "you".                                       
                                                                              
   Activities other  than  copying,  distribution and  modification  are  not 
   covered by this License;  they are outside its  scope. The act of  running 
   the Program is not restricted, and the output from the Program is  covered 
   only if its contents constitute a  work based on the Program  (independent 
   of having been made by running the Program). Whether that is true  depends 
   on what the Program does.                                                  
                                                                              
   1. You may  copy and distribute  verbatim copies of  the Program's  source 
   code as you receive it, in any medium, provided that you conspicuously and 
   appropriately publish on  each copy  an appropriate  copyright notice  and 
   disclaimer of warranty;  keep intact all  the notices that  refer to  this 
   License and to the absence of any warranty; and give any other  recipients 
   of the Program a copy of this License along with the Program.              
                                                                              
   You may charge a fee for the physical act of transferring a copy, and  you 
   may at your option offer warranty protection in exchange for a fee.        
                                                                              
   2. You may modify your copy or copies of the Program or any portion of it, 
   thus forming a  work based on  the Program, and  copy and distribute  such 
   modifications or work under  the terms of Section  1 above, provided  that 
   you also meet all of these conditions:                                     
                                                                              
   a) You must cause  the modified files to  carry prominent notices  stating 
   that you changed the files and the date of any change.                     
                                                                              
   b) You must cause any work that  you distribute or publish, that in  whole 
   or in part contains or is derived from the Program or any part thereof, to 
   be licensed as a whole at no  charge to all third parties under the  terms 
   of this License.                                                           
                                                                              
   c) If the modified program normally reads commands interactively when run, 
   you must cause it,  when started running for  such interactive use in  the 
   most ordinary  way,  to print  or  display an  announcement  including  an 
   appropriate copyright notice and  a notice that there  is no warranty  (or 
   else, saying that you provide a warranty) and that users may  redistribute 
   the program under  these conditions, and  telling the user  how to view  a 
   copy of this License. (Exception: if the Program itself is interactive but 
   does not  normally print  such an  announcement, your  work based  on  the 
   Program is not required to print an announcement.)                         
                                                                              
   These requirements apply to the modified work as a whole. If  identifiable 
   sections of  that  work are  not  derived from  the  Program, and  can  be 
   reasonably considered independent and  separate works in themselves,  then 
   this License,  and its  terms, do  not apply  to those  sections when  you 
   distribute them  as  separate works.  But  when you  distribute  the  same 
   sections as part  of a whole  which is a  work based on  the Program,  the 
   distribution of the  whole must  be on the  terms of  this License,  whose 
   permissions for other licensees  extend to the entire  whole, and thus  to 
   each and every part regardless of who wrote it.                            
                                                                              
   Thus, it is not the intent of this section to claim rights or contest your 
   rights to work written entirely by you; rather, the intent is to  exercise 
   the right to control  the distribution of  derivative or collective  works 
   based on the Program.                                                      
                                                                              
   In addition, mere  aggregation of another  work not based  on the  Program 
   with the Program (or with  a work based on the  Program) on a volume of  a 
   storage or distribution  medium does not  bring the other  work under  the 
   scope of this License.                                                     
                                                                              
   3. You may copy and distribute the  Program (or a work based on it,  under 
   Section 2) in object code or executable form under the terms of Sections 1 
   and 2 above provided that you also do one of the following:                
                                                                              
   a) Accompany it  with the complete  corresponding machine-readable  source 
   code, which must be distributed under the terms of Sections 1 and 2  above 
   on a medium customarily used for software interchange; or,                 
                                                                              
   b) Accompany it with a written offer,  valid for at least three years,  to 
   give any third party, for  a charge no more  than your cost of  physically 
   performing source distribution,  a complete machine-readable  copy of  the 
   corresponding source code, to be distributed under the terms of Sections 1 
   and 2 above on a medium customarily used for software interchange; or,     
                                                                              
   c) Accompany  it with  the information  you received  as to  the offer  to 
   distribute corresponding source  code. (This alternative  is allowed  only 
   for noncommercial distribution  and only  if you received  the program  in 
   object code  or  executable  form  with such  an  offer,  in  accord  with 
   Subsection b above.)                                                       
                                                                              
   The source code for a work means the preferred form of the work for making 
   modifications to it. For  an executable work,  complete source code  means 
   all the  source code  for all  modules it  contains, plus  any  associated 
   interface definition files, plus the  scripts used to control  compilation 
   and installation of the executable.  However, as a special exception,  the 
   source code  distributed  need  not  include  anything  that  is  normally 
   distributed (in either source  or binary form)  with the major  components 
   (compiler, kernel,  and  so on)  of  the  operating system  on  which  the 
   executable runs, unless that component itself accompanies the executable.  
                                                                              
   If distribution of executable or object code is made by offering access to 
   copy from a designated place, then offering equivalent access to copy  the 
   source code from the same place counts as distribution of the source code, 
   even though third parties are not compelled to copy the source along  with 
   the object code.                                                           
                                                                              
   4. You may not copy, modify, sublicense, or distribute the Program  except 
   as expressly provided under this  License. Any attempt otherwise to  copy, 
   modify,  sublicense  or   distribute  the  Program   is  void,  and   will 
   automatically terminate your rights  under this License. However,  parties 
   who have received copies, or rights, from you under this License will  not 
   have their licenses  terminated so  long as  such parties  remain in  full 
   compliance.                                                                
                                                                              
   5. You are not required to accept this License, since you have not  signed 
   it. However, nothing else  grants you permission  to modify or  distribute 
   the Program or its derivative works.  These actions are prohibited by  law 
   if you do not accept this License. Therefore, by modifying or distributing 
   the Program  (or  any  work  based on  the  Program),  you  indicate  your 
   acceptance of this License to do so, and all its terms and conditions  for 
   copying, distributing or modifying the Program or works based on it.       
                                                                              
   6. Each  time you  redistribute the  Program  (or any  work based  on  the 
   Program), the recipient automatically receives a license from the original 
   licensor to copy, distribute or modify the Program subject to these  terms 
   and conditions.  You  may  not  impose any  further  restrictions  on  the 
   recipients' exercise of the rights granted herein. You are not responsible 
   for enforcing compliance by third parties to this License.                 
                                                                              
   7. If,  as a  consequence of  a  court judgment  or allegation  of  patent 
   infringement or  for any  other  reason (not  limited to  patent  issues), 
   conditions are  imposed  on you  (whether  by court  order,  agreement  or 
   otherwise) that contradict  the conditions  of this License,  they do  not 
   excuse you from the conditions of  this License. If you cannot  distribute 
   so as to satisfy  simultaneously your obligations  under this License  and 
   any other  pertinent  obligations,  then  as a  consequence  you  may  not 
   distribute the Program at all. For example, if a patent license would  not 
   permit royalty-free redistribution of the Program by all those who receive 
   copies directly or  indirectly through you,  then the only  way you  could 
   satisfy both  it  and this  License  would  be to  refrain  entirely  from 
   distribution of the Program.                                               
                                                                              
   If any portion of this section is held invalid or unenforceable under  any 
   particular circumstance, the balance of  the section is intended to  apply 
   and the section as a whole is intended to apply in other circumstances.    
                                                                              
   It is  not the  purpose of  this section  to induce  you to  infringe  any 
   patents or other property right claims or to contest validity of any  such 
   claims; this section has the sole  purpose of protecting the integrity  of 
   the free  software distribution  system, which  is implemented  by  public 
   license practices. Many  people have  made generous  contributions to  the 
   wide range  of software  distributed through  that system  in reliance  on 
   consistent application of  that system; it  is up to  the author/donor  to 
   decide if he or  she is willing to  distribute software through any  other 
   system and a licensee cannot impose that choice.                           
                                                                              
   This section is intended to make thoroughly clear what is believed to be a 
   consequence of the rest of this License.                                   
                                                                              
   8. If the distribution and/or use of the Program is restricted in  certain 
   countries either by  patents or  by copyrighted  interfaces, the  original 
   copyright holder who  places the  Program under  this License  may add  an 
   explicit geographical distribution  limitation excluding those  countries, 
   so that distribution  is permitted  only in  or among  countries not  thus 
   excluded. In such  case, this  License incorporates the  limitation as  if 
   written in the body of this License.                                       
                                                                              
   9. The Free Software Foundation may publish revised and/or new versions of 
   the General Public License  from time to time.  Such new versions will  be 
   similar in spirit  to the  present version, but  may differ  in detail  to 
   address new problems or concerns.                                          
                                                                              
   Each version  is given  a distinguishing  version number.  If the  Program 
   specifies a version number  of this License which  applies to it and  "any 
   later version", you have the option of following the terms and  conditions 
   either of  that version  or of  any later  version published  by the  Free 
   Software Foundation. If the Program does  not specify a version number  of 
   this License,  you may  choose  any version  ever  published by  the  Free 
   Software Foundation.                                                       
                                                                              
   10. If  you wish  to incorporate  parts  of the  Program into  other  free 
   programs whose distribution conditions are different, write to the  author 
   to ask  for permission.  For software  which is  copyrighted by  the  Free 
   Software Foundation, write to the  Free Software Foundation; we  sometimes 
   make exceptions for this. Our decision will be guided by the two goals  of 
   preserving the free status of all derivatives of our free software and  of 
   promoting the sharing and reuse of software generally.                     
                                                                              
                                  NO WARRANTY                                 
                                                                              
   11. BECAUSE THE PROGRAM IS LICENSED  FREE OF CHARGE, THERE IS NO  WARRANTY 
   FOR THE PROGRAM, TO  THE EXTENT PERMITTED BY  APPLICABLE LAW. EXCEPT  WHEN 
   OTHERWISE STATED IN  WRITING THE  COPYRIGHT HOLDERS  AND/OR OTHER  PARTIES 
   PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
   OR IMPLIED,  INCLUDING, BUT  NOT  LIMITED TO,  THE IMPLIED  WARRANTIES  OF 
   MERCHANTABILITY AND FITNESS FOR A  PARTICULAR PURPOSE. THE ENTIRE RISK  AS 
   TO THE QUALITY  AND PERFORMANCE  OF THE PROGRAM  IS WITH  YOU. SHOULD  THE 
   PROGRAM PROVE DEFECTIVE, YOU ASSUME  THE COST OF ALL NECESSARY  SERVICING, 
   REPAIR OR CORRECTION.                                                      
                                                                              
   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN  WRITING 
   WILL ANY  COPYRIGHT HOLDER,  OR  ANY OTHER  PARTY  WHO MAY  MODIFY  AND/OR 
   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
   INCLUDING  ANY  GENERAL,  SPECIAL,  INCIDENTAL  OR  CONSEQUENTIAL  DAMAGES 
   ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT  NOT 
   LIMITED TO  LOSS OF  DATA  OR DATA  BEING  RENDERED INACCURATE  OR  LOSSES 
   SUSTAINED BY YOU OR THIRD PARTIES OR  A FAILURE OF THE PROGRAM TO  OPERATE 
   WITH ANY OTHER  PROGRAMS), EVEN  IF SUCH HOLDER  OR OTHER  PARTY HAS  BEEN 
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.                                
                                                                              
                          END OF TERMS AND CONDITIONS                         

                                        

    

   YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT (INCLUDING THE EXHIBITS)
   AND UNDERSTAND IT, AND THAT BY  CLICKING ON THE "ACCEPT" BUTTON BELOW  AND
   INSTALLING/DOWNLOADING THE SOFTWARE YOU  ACCEPT AND AGREE  TO BE BOUND  BY
   THE TERMS AND CONDITIONS OF THIS AGREEMENT.

   Plan 9 Open Source License - Version 1.4 - 09/10/02
ND AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT.

   Plan 9 Open Source License - Version 1.4 - 09/10/02
