Repo ↗ · Source README ↗ · Markdown & license bundle

Image reference (original game): Super Smash Bros. Melee · original-game artwork, provided by IGDB. Image rights remain with their respective owners. This illustrates the referenced original game, not the actual visuals of this rewrite or mod.

Source maintainer: GurekamDhillon · Revision: 238f03900338 · Catalogued: 2026-10-12

Source license: GPL-2.0 · LICENSE · Article: Source README (format adapted)

The source README follows, with formatting adapted for this site and images replaced by source links. Feature, completion and testing claims belong to its authors and have not been independently playtested here. The Traditional Chinese translation was prepared with AI assistance.


GD’s Melee

[README image:GD](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/brand/logo_horizontal_light.png)

README link
README image:Platform: Windows x64 and Linux x86_64
README image:Netplay: rollback
README image:Mods: m-ex compatible
README image:Replays: Slippi
README link
README link

Join GD’s Workshop on Discord for matchmaking, setup help, bug reports, and modding.

README link

Real gameplay, captured frame by frame from the game’s own screenshot hook. MP4 version.

A native PC port of Super Smash Bros. Melee (NTSC 1.02, GALE01), built from the matching
decompilation
rather than by emulation or by recompiling the retail binary. It plays online with
rollback netcode from a competitive lobby, renders natively in HD, runs m-ex mod discs and
loose mods, and can be scripted in Lua.

Status: public test build (0.2.2). Expect rough edges and please report bugs: what you did,
which disc, and the crash report from the crashlogs folder (or melee-pc.log). Windows and
Linux 0.2.2 play each other online; they do not play 0.2.1 or earlier, so both players update.

Quick start

README link
README link

  1. Download the latest release from
    Releases and unpack it
    anywhere: GDMelee-<version>-win64.zip on Windows, or
    GDMelee-<version>-linux-x86_64.tar.xz on Linux (tar xf, then run ./GD-Melee).
  2. Point it at your own disc. Start GD Melee.exe (Windows) or ./GD-Melee (Linux), click
    Add disc… and pick your own legally dumped Melee NTSC 1.02 .iso (mod discs such as ACE or
    Akaneia work too). Nothing disc-derived is distributed with the port.
  3. Play. Press PLAY. For online play: VERSUS > ONLINE, then host a room and send the
    code, join one, or press Random Opponent.

The launcher is in English and Spanish (it follows the system language by default; English or Spanish
can be chosen in the launcher). Windows SmartScreen warns on first run because the launcher isn’t
code-signed. The Linux build is a 32-bit game on a 64-bit host and needs the distribution’s 32-bit
runtime and Vulkan driver; the tarball’s README.txt lists the packages. Press F11 or
Alt+Enter for fullscreen.

What’s new in 0.2.x

Details for each release are in tools/release/notes/.

  • Linux, and Windows-vs-Linux play. A native Linux x86_64 build with the same launcher, mods and
    online play; Windows and Linux players can match each other. Before a match both games compare a
    build id, and a mismatched build is refused instead of desyncing (0.2.0, fixed up in 0.2.2).
  • Online. Rollback with room codes and a competitive lobby, a stricter disc check, sets that
    resume after a disconnect (or can be abandoned), tied games replayed instead of sudden death, and
    the Turbo match rule for private rooms. Rollback checks look at far more of the game, so a real
    desync is caught on the frame it starts.
  • Mod browser in the game (SSBM Nucleus). Browse and search mods with thumbnails and filters, queue
    them (the queue survives a restart) and the game downloads and installs zip mods for you.
    Mods from SSBM Nucleus - https://ssbmnucleus.net, used with the permission of sc00p.
  • 255 costumes per fighter, so skins are no longer limited to the original palette slots.
  • Fullscreen with F11 or Alt+Enter, and a Video setting.
  • Everything unlocked by default: every fighter and stage from the start. Turn it off in
    Settings > Gameplay.
  • Envoy, a roguelite on top of Classic and Adventure: pick a drive after each stage, carry four in
    a bag, take rare keystones with a drawback, and face tougher opponents that use technique against
    you. It ships on by default (SOLO > ENVOY; the launcher’s Mods tab turns it off); two players can
    run it as offline co-op, or play an Envoy set in a private online room.
  • A new Qt launcher for Windows and Linux with a Diagnostics tab, and opt-in crash report upload.
  • Linux fixes: much faster rollback snapshots, the Turbo crashes fixed, and Envoy drive items,
    the crit shader and mod surface shaders now work. Elsewhere: a bad shader-cache entry can no longer
    stop the game from starting, and Data > Snapshots no longer freezes.

Features

<table>
<tr>
<td>

  [README image:Rollback netplay: Room codes or Random Opponent. Windows and Linux play each other.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_rollback_light.png)
</td>
<td>
  
  [README image:Competitive lobby: Blind picks, starters and counterpicks, 1-2-1 strikes, bans and rematches.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_lobby_light.png)
</td>

</tr>
<tr>
<td>

  [README image:HD at any resolution: Native D3D12 or Vulkan at any render scale, vsync off, ~13 ms input.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_hd_light.png)
</td>
<td>
  
  [README image:m-ex mod support: Mod discs and loose mods: fighters, stages, items and music, online too.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_mex_light.png)
</td>

</tr>
<tr>
<td>

  [README image:94 fighter slots: Room for big m-ex rosters, with their names, emblems and stock icons.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_roster_light.png)
</td>
<td>
  
  [README image:Lua scripting + kit UI: Scripts, a console and gd.kit: draw panels in the menus](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_scripting_light.png)
</td>

</tr>
<tr>
<td>

  [README image:Training on the kit: Training can run through the new character and stage select screens.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_training_light.png)
</td>
<td>
  
  [README image:Launcher, EN / ES: Windows and Linux. Mods, diagnostics and crash reports, in English and Spanish.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_launcher_light.png)
</td>

</tr>
<tr>
<td>

  [README image:Slippi replays: Frame-accurate playback of .slp replays, straight from the game.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_replays_light.png)
</td>
<td>
  
  [README image:Settings screen: Video, audio, controls and online options, applied right away.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_settings_light.png)
</td>

</tr>
<tr>
<td>

  [README image:UCF + tournament rules: Universal Controller Fix and tournament rule sets, built in.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_ucf_light.png)
</td>
<td>
  
  [README image:Deterministic engine: Bit-exact simulation, checked frame by frame with SyncTest.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_determinism_light.png)
</td>

</tr>
<tr>
<td>

  [README image:Envoy roguelite: A run of stages with loot and keystones. Solo, co-op or an online set.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_envoy_light.png)
</td>
<td>
  
  [README image:In-game mod browser: Browse SSBM Nucleus mods in the game and install them from a queue.](https://github.com/GurekamDhillon/gd-melee-workspace/blob/238f0390033880036ac86db07ef6fa240679c23f/docs/readme/feature_modbrowser_light.png)
</td>

</tr>
</table>

Features

Online

  • Rollback netcode, between Windows and Linux players too. Play a friend with a short room code, or
    press Random Opponent to be paired with anyone searching.
  • A competitive lobby in the same room: blind character picks, stage strikes and bans, ready-up and
    rematches, with the set score kept.
  • Stages are split into starters (Battlefield, Final Destination, Dream Land, Yoshi’s Story,
    Fountain of Dreams) and a counterpick (Pokémon Stadium). Game 1 strikes over the starters
    1-2-1; the counterpick opens from game 2 for bans and picks.
  • The strike cursor skips struck and banned stages in every direction, with wrap-around.
  • Sheik can be picked online (press A on Zelda again), and mods work online: you can pick any
    fighter or stage both players have.
  • The GameCube adapter follows the window you’re using and is only held in the background during an
    online match.

Mods (m-ex)

  • Mod discs (ACE, Akaneia) and loose mods copied into the mods folder. The launcher’s Mods tab
    lists installed mods, enables/disables them, and moves removed mods to a recoverable folder. It does
    not download mods; the in-game browser (above) does,.
  • 94 m-ex fighter slots (up from 31), so big rosters fit.
  • The results screen shows m-ex fighters’ names, emblems and stock icons.
  • m-ex CPUs play from their clone base’s CPU tables.

Menus and screens

  • New main menu, hubs, character select and stage select that list every fighter and stage your
    disc and mods provide, with pages for big rosters.
  • Training can run through the new character and stage select (gd.training_select("kit"),
    or select=kit in the scene grammar).
  • A Settings screen: video, audio, controls, online name and server, mods and gameplay options,
    applied right away and saved.
  • Everything unlocked from the start by default, without a save file (Settings > Gameplay turns it off).

Graphics and input

  • Native rendering (D3D12 on Windows, Vulkan on Linux) at any render scale, vsync off, and an experimental uncapped frame rate.
  • About 13 ms from controller to screen, steadily.
  • Fullscreen (F11 or Alt+Enter) and 255 costumes per fighter.
  • GameCube adapter (plug in any time, clones supported) and any gamepad.

Scripting

  • Lua scripts and a console (the backtick key). Scripts can read the match, draw, wait on the game,
    add console commands, and, if they declare it, drive gameplay (rollback-safe).
  • gd.kit: scripts draw with the menus’ own kit (9-slice panels, the kit’s fonts and text
    roles, list rows, icons, the palette) over any scene, a match included. Mods can ship their own
    kit art.
  • Built-in examples: tm_lite (save/load positions on F5-F8), state_overlay (frame data),
    kit_hud, scene_setup. See docs/scripting.md.

Launcher and reports

  • English and Spanish; the language follows Windows by default.
  • Diagnostics tab, short logs, and local crash reports with your Windows user name removed.
    The Qt launcher opens logs and copies reports for sharing. Uploading crash reports is optional, off by
    default, and only happens when you click “Upload last 3 crash logs”.

Changelog

Per-release notes: tools/release/notes/. Highlights of the 0.1.x line:

  • 0.1.5: the keyboard is hotkeys only (controllers play), a “Connect a controller” notice, the
    mouse in menus (gd.mouse() for scripts), items no longer hitch on first spawn, m-ex crash fixes,
    bit-exact matrix maths with six console Slippi replays played back to the bit, and the Geno engine
    and LAB mode.
  • 0.1.6: TRAINING with frame advantage, move data and a configurable dummy; COMBO and DRILLS.

Screenshots

All captured from the running port (1280x960 window unless noted).

<table>
<tr>
<td width=“50%”>README image:Online lobby, game 1 stage striking: starters on the left, Pokémon Stadium as the counterpick, Dream Land struck by P2, the cursor on Battlefield</td>
<td width=“50%”>README image:A Fox vs Marth match on Battlefield rendered at 3x (1920x1440)</td>
</tr>
<tr>
<td>README image:The new character select on the Akaneia disc, with the m-ex fighters in the grid and Dr. Mario picked</td>
<td>README image:The new stage select, page 1 of 2</td>
</tr>
<tr>
<td>README image:The kit_hud example script: a panel drawn with gd.kit over a match, listing both fighters and their percent</td>
<td>README image:Training</td>
</tr>
<tr>
<td>README image:Wolf vs Charizard, two m-ex fighters, on Final Destination</td>
<td>README image:The results screen naming m-ex fighters Wolf and Charizard, with their emblems and portraits</td>
</tr>
<tr>
<td>README image:The new main menu: Versus, Solo, Collection, Settings, Data</td>
<td>README image:The Settings screen: video, audio, controls, online, mods, gameplay, rumble, screen display, language</td>
</tr>
<tr>
<td>README image:The launcher</td>
<td>README image:The launcher</td>
</tr>
</table>

The Geno engine

Geno is the port’s own layer for fighter content that m-ex can’t express. A fighter opts in
through a geno.json next to its m-ex files; a fighter without one runs exactly as m-ex defines it,
so Geno stays 100% m-ex compatible. Everything it adds lives in the rollback snapshot and is
deterministic, so it works online. Geno adds character abilities inside Melee’s rules: it never
changes Melee’s physics, hitstun, knockback, air dodge or ledge rules.

  • v0, the foundation: a registry with stable ids (salted into the netplay handshake), a
    per-fighter state block, a script escape in the fighter’s own move scripts (variables, if/else,
    calls), attribute overrides, and multi-jump past Melee’s table.
  • v1, script features: script overlays for any subaction, engine values (read, write and
    test), change-action with Brawl-style requirements, rehit, autolink, special-attribute overrides
    and on-land handlers.
  • v2, action states: brand-new action states with native behaviours: glide, and Brawl-style
    specials such as Mach Tornado and Drill Rush.
  • v3, root motion: states that follow their animation’s root motion on the ground and in the
    air, hidden and intangible values (Dimensional Cape), and Drill Rush rebuilt from Brawl’s own code.
  • v4, the model follows the move: the model pitches with a drill and spins at a tornado’s spin
    rate.

The full reference is docs/geno.md
in the melee fork.

LAB, the frame-data lab

SOLO > LAB is a game mode of its own for studying any fighter (vanilla, m-ex or Geno): any
fighters and CPUs on any stage, KOs respawn, and the clock never runs out.

  • Display modes (hitboxes, hurtboxes, ECB, skeleton and more), a HUD drawn in the menus’ own
    style, and a full-screen pause menu styled after Sakurai’s move-list screens.
  • Rewind a long way back and step frame by frame, a persistent savestate library, and hot
    reload
    of a fighter’s files mid-match.
  • The state browser: every action state the fighter has (common, special, m-ex, Geno), played
    from neutral, looped or slowed down, with its script windows beside it.
  • Knockback preview: where a hitbox will send the victim, with DI, hitstun, tumble and the
    frame it crosses a blast zone, computed by the game’s own knockback code.
  • A/B compare: two fighters, or two versions of one, in lock-step.
  • Frame-data export and diff.
  • Rollback visualiser: see what a rollback re-simulates.
  • Vanilla-parity checks against real Slippi replays recorded on a console: the port plays them
    back and compares every frame.

New in 0.1.6: TRAINING shows frame advantage, move data, inputs and technique feedback. A
configurable dummy supports DI, techs, reactions and recorded inputs; COMBO reviews follow-ups,
and DRILLS provides scored practice. LAB remains offline only.

Ports: Halberd (Meta Knight)

ports/halberd/ is Halberd, Meta Knight ported from Super Smash Bros.
Brawl
as an m-ex fighter on Geno: his normals, grabs and throws, his four specials, glide, six
jumps, and his own effects, sounds and menu art. This repository carries the research only:
notes, the character IR, the conversion tools and configs. No Nintendo assets are included;
rebuilding him requires your own legally obtained copies of the games. The shared character IR
schema is in ports/ir/.

Known issues

  • UnclePunch’s Training Mode features are not fully ported; LAB and tm_lite cover different
    practice workflows. TM-CE and 20XX discs boot, but their disc-specific features don’t work.
  • Fighter and stage mods from different packs (for example ACE fighters with Akaneia stages) can’t
    be mixed yet.
  • The uncapped frame rate is experimental: the picture trails the game by one frame.
  • Teams mode on the new character select isn’t finished, and 4-player local matches have had little
    testing.
  • Online play has been tested on one PC with two game windows, not yet widely across the internet.
    Online Envoy has only the passive drives.
  • New skins appear after a restart. Heavy modded fighters can still cost more than a 120 fps game allows.
  • On some Linux laptops the game has run below 60 fps (0.2.1); this is still being worked on.
  • On a 144 Hz monitor, 60 fps looks uneven. Set the display to 120 Hz, or turn on G-Sync/FreeSync.

Each release’s notes are in tools/release/notes/.

What this is

Most “Melee on PC” efforts are either emulation (Dolphin + Slippi) or static recompilation of the
retail binary. This project takes a third road — compiled decompilation:

  • doldecomp/melee is a matching decompilation of Melee in
    which every game translation unit is real C that reproduces the original PowerPC behavior.
  • Those translation units are retargeted to x86 by pc/tools/gwtool: clang’s PPC front-end emits
    LLVM IR, and gwtool rewrites every memory access to be big-endian, prefixes every symbol with
    gw_, and emits x86 COFF. The result links against a native platform layer.
  • The GameCube SDK surface (GX, OS, PAD, CARD, AX, DVD, AR, …) is replaced by native shims over
    Aurora (a GC/Wii SDK reimplementation on top of
    Dawn), so rendering goes straight to D3D12 (Windows) or Vulkan (Linux) with no emulated
    GPU. Where the SDK’s own decompiled source is worth keeping, it is built as a translation unit
    like any other — the THP video decoder is, with its Gekko paired-single IDCT rewritten in
    portable C.
  • m-ex content ships PowerPC code inside its data files; the port runs those blobs through a small
    PowerPC interpreter and bridges their calls back to its own native functions.

The payoff over static recompilation is a fully editable game — every line of engine code is C
you can change. The price is that all ~980 translation units must be made correct by hand, which is
where most of the engineering goes (see the devlog).

Status

Area State
Boot → menus → VS match, Training working
Rendering (GX → D3D12 on Windows, Vulkan on Linux, via Aurora/Dawn), any render scale working
Audio (own AX / DSP-ADPCM mixer over SDL3) working, incl. both aux buses + AXFX reverb/delay
Cutscenes (THP video, own decoder) working
Memory-card saves (GCI) working
GameCube adapter, gamepads (keyboard = hotkeys only), mouse in menus working
Vanilla parity (console Slippi replays, bit-exact) working
Geno engine + LAB mode public test, including LAB training, dummy, combos and drills
Frame pacing hard 60 Hz; experimental uncapped frame rate
Rollback netplay + competitive lobby public test
Slippi replay playback working
m-ex discs and loose mods (94 fighter slots) public test
Lua scripting + console working (API 1)
Windows x64 and Linux x86_64 builds, Windows-vs-Linux online play public test (0.2.2)
Launcher (Qt, English and Spanish), release packaging public test (0.2.2)
In-game SSBM Nucleus mod browser (zip mods) public test (0.2.2)
Envoy roguelite (solo, offline co-op, online sets with passive drives) public test; look and balance still being tuned
Widescreen Hor+ gameplay; centred wide kit menus and Lua canvas, live VIDEO toggle (menu changes awaiting in-game verification)

Repository layout

docs/DEVLOG.md        engineering log: every hard-won fact, bug and fix (read this first)
docs/HANDOFF.md       current state + next experiment (resume here)
docs/scripting.md     the Lua scripting API, the console and the examples
PORT_BOOTSTRAP.md     project origin and the feasibility analysis
_research/            boot gates, SDK/console invariants, shim surface, port dev quickref
_build/               Windows build scripts (Aurora, per-TU pipeline, link, run)
tools/port/           build.sh (build + bridge fixpoint), run.sh (sandboxed runs)
tools/release/        the launcher, release build/check/publish scripts, release notes
tools/netplay/        the matchmaking server and netplay test drivers
ports/               fighter ports (research only, no assets): halberd/ (Meta Knight), ir/ (character IR)
DEPENDENCIES.md       every third-party component, its version/pin, and its licence

The port source itself lives in the melee fork of doldecomp/melee, on the
pc-port branch, under pc/
(pc/platform shims, pc/gameworld, pc/tools/gwtool). That fork is the buildable project; this
repository carries the tooling, launcher, research and engineering log around it.

Building

Host is Windows with WSL, MSVC Build Tools, clang 23, and CMake/Ninja for Aurora. The exact,
maintained commands are in _research/port-dev-quickref.md. In
short:

  1. Build Aurora + Dawn + SDL3 — _build/build_aurora_melee.bat.
  2. Build melee-pc.exe — tools/port/build.sh compiles changed translation units through the
    retarget pipeline, links, and regenerates the m-ex bridge until it is a fixpoint.
  3. Run it against your own disc image — tools/port/run.sh <name> --iso .
  4. Package a release — see tools/release/README.md.
  • No copyrighted material is included. You must supply your own legally dumped ISO of
    Super Smash Bros. Melee (NTSC 1.02). No ROM, no game assets and no Nintendo SDK code are
    distributed here. The screenshots show the port running on the author’s own discs.
  • Ports carry research only. ports/ holds notes, tools and configs, never game files; a port
    such as Halberd is built locally from your own legally obtained copy of the source game
    (Super Smash Bros. Brawl), and .gitignore keeps every built asset out of the repository.
  • Not affiliated with, endorsed by or sponsored by Nintendo. Super Smash Bros. and Melee are
    trademarks of Nintendo.
  • The underlying decompilation is a pre-existing, openly published, research-oriented effort.
  • The port is licensed GPL-2.0-or-later — see LICENSE.

Credits

  • doldecomp/melee — the decompilation this is built on.
  • encounter/aurora — GC/Wii SDK reimplementation.
  • google/dawn — WebGPU implementation.
  • TwilitRealm/dusklight — precedent for turning a
    GameCube decomp into a native cross-platform port.
  • akaneia/m-ex and its contributors — the content-expansion
    framework whose patches are used as the specification for behaviors reimplemented in the
    port (no m-ex source is vendored or built; see
    DEPENDENCIES.md).
  • Dolphin Emulator — pc/gameworld/gekko_fp.c derives from Common/FloatUtils.cpp
    (GPL-2.0-or-later); attribution is in that file.

License and provenance

The README and its translation retain GPL-2.0 terms. Changes comprise translation, links and formatting. Editable Markdown, the original README, LICENSE and NOTICE files are included in the linked bundle. This grants no rights to the original games, their assets or trademarks.

LICENSE

GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 <https://fsf.org/>
 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 Lesser 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

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Moe Ghoul>, 1 April 1989
  Moe Ghoul, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.